diff options
Diffstat (limited to 'ACE/ace/OS_NS_dirent.inl')
-rw-r--r-- | ACE/ace/OS_NS_dirent.inl | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/ACE/ace/OS_NS_dirent.inl b/ACE/ace/OS_NS_dirent.inl new file mode 100644 index 00000000000..862dd7d07c3 --- /dev/null +++ b/ACE/ace/OS_NS_dirent.inl @@ -0,0 +1,185 @@ +// -*- C++ -*- +// +// $Id$ + +#include "ace/OS_Memory.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace ACE_OS +{ + +ACE_INLINE void +closedir (ACE_DIR *d) +{ +#if defined (ACE_HAS_DIRENT) +# if defined (ACE_WIN32) && defined (ACE_LACKS_CLOSEDIR) + ACE_OS::closedir_emulation (d); + delete [] d->directory_name_; + delete d; +# elif defined (ACE_HAS_WCLOSEDIR) && defined (ACE_USES_WCHAR) + ::wclosedir (d); +# else /* ACE_WIN32 && ACE_LACKS_CLOSEDIR */ + ::closedir (d); +# endif /* ACE_WIN32 && ACE_LACKS_CLOSEDIR */ + +#else /* ACE_HAS_DIRENT */ + ACE_UNUSED_ARG (d); +#endif /* ACE_HAS_DIRENT */ +} + +ACE_INLINE ACE_DIR * +opendir (const ACE_TCHAR *filename) +{ +#if defined (ACE_HAS_DIRENT) +# if defined (ACE_WIN32) && defined (ACE_LACKS_OPENDIR) + return ::ACE_OS::opendir_emulation (filename); +# elif defined (ACE_HAS_WOPENDIR) && defined (ACE_USES_WCHAR) + return ::wopendir (filename); +# elif defined (ACE_HAS_NONCONST_OPENDIR) + return ::opendir (const_cast<char *> (filename)); +# else /* ! ACE_WIN32 && ACE_LACKS_OPENDIR */ + return ::opendir (ACE_TEXT_ALWAYS_CHAR (filename)); +# endif /* ACE_WIN32 && ACE_LACKS_OPENDIR */ +#else + ACE_UNUSED_ARG (filename); + ACE_NOTSUP_RETURN (0); +#endif /* ACE_HAS_DIRENT */ +} + +ACE_INLINE +struct ACE_DIRENT * +readdir (ACE_DIR *d) +{ +#if defined (ACE_HAS_DIRENT) +# if defined (ACE_WIN32) && defined (ACE_LACKS_READDIR) + return ACE_OS::readdir_emulation (d); +# elif defined (ACE_HAS_WREADDIR) && defined (ACE_USES_WCHAR) + return ::wreaddir (d); +# else /* ACE_WIN32 && ACE_LACKS_READDIR */ + return ::readdir (d); +# endif /* ACE_WIN32 && ACE_LACKS_READDIR */ +#else + ACE_UNUSED_ARG (d); + ACE_NOTSUP_RETURN (0); +#endif /* ACE_HAS_DIRENT */ +} + +ACE_INLINE int +readdir_r (ACE_DIR *dirp, + struct ACE_DIRENT *entry, + struct ACE_DIRENT **result) +{ +#if !defined (ACE_HAS_REENTRANT_FUNCTIONS) + ACE_UNUSED_ARG (entry); + // <result> has better not be 0! + *result = ACE_OS::readdir (dirp); + if (*result) + return 0; // Keep iterating + else + return 1; // Oops, some type of error! +#elif defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_READDIR_R) +# if (defined (sun) && (defined (_POSIX_PTHREAD_SEMANTICS) || \ + (_FILE_OFFSET_BITS == 64) || \ + (_POSIX_C_SOURCE - 0 >= 199506L))) || \ + (!defined (sun) && (defined (ACE_HAS_PTHREADS_STD) || \ + defined (ACE_HAS_PTHREADS_DRAFT7) || \ + defined (_POSIX_SOURCE) || \ + defined (__FreeBSD__) || \ + defined (HPUX_11))) +# if defined (__GNUG__) && defined (DIGITAL_UNIX) + return readdir_r (dirp, entry, result); +# else + return ::readdir_r (dirp, entry, result); +# endif /* defined (__GNUG__) && defined (DIGITAL_UNIX) */ +# else /* ! POSIX.1c - this is draft 4 or draft 6 */ +# if defined(__GNUC__) && defined (_AIX) + return ::readdir_r (dirp, entry, result); +# else + // <result> had better not be 0! + *result = ::readdir_r (dirp, entry); + return 0; +# endif /* AIX */ +# endif /* ! POSIX.1c */ +#else /* ! ACE_HAS_DIRENT || ACE_LACKS_READDIR_R */ + ACE_UNUSED_ARG (dirp); + ACE_UNUSED_ARG (entry); + ACE_UNUSED_ARG (result); + ACE_NOTSUP_RETURN (0); + +#endif /* ACE_HAS_REENTRANT_FUNCTIONS */ +} + +ACE_INLINE void +rewinddir (ACE_DIR *d) +{ +#if defined (ACE_HAS_DIRENT) +# if defined (ACE_LACKS_SEEKDIR) +# if defined (ACE_LACKS_REWINDDIR) + ACE_UNUSED_ARG (d); +# elif defined (ACE_HAS_WREWINDDIR) && defined (ACE_USES_WCHAR) + ::wrewinddir (d); +# else /* ! defined (ACE_LACKS_REWINDDIR) */ + ::rewinddir (d); +# endif /* ! defined (ACE_LACKS_REWINDDIR) */ +# else /* ! ACE_LACKS_SEEKDIR */ + // We need to implement <rewinddir> using <seekdir> since it's often + // defined as a macro... + ::seekdir (d, long (0)); +# endif /* ! ACE_LACKS_SEEKDIR */ +#else + ACE_UNUSED_ARG (d); +#endif /* ACE_HAS_DIRENT */ +} + +ACE_INLINE int +scandir (const ACE_TCHAR *dirname, + struct ACE_DIRENT **namelist[], + ACE_SCANDIR_SELECTOR selector, + ACE_SCANDIR_COMPARATOR comparator) +{ +#if defined (ACE_HAS_SCANDIR) + return ::scandir (ACE_TEXT_ALWAYS_CHAR (dirname), + namelist, +# if defined (ACE_SCANDIR_SEL_LACKS_CONST) + reinterpret_cast<ACE_SCANDIR_OS_SELECTOR> (selector), +# else + selector, +# endif /* ACE_SCANDIR_SEL_LACKS_CONST */ +# if defined (ACE_SCANDIR_CMP_USES_VOIDPTR) || \ + defined (ACE_SCANDIR_CMP_USES_CONST_VOIDPTR) + reinterpret_cast<ACE_SCANDIR_OS_COMPARATOR> (comparator)); +# else + comparator); +# endif /* ACE_SCANDIR_CMP_USES_VOIDPTR */ + +#else /* ! defined ( ACE_HAS_SCANDIR) */ + return ACE_OS::scandir_emulation (dirname, namelist, selector, comparator); +#endif /* ACE_HAS_SCANDIR */ +} + +ACE_INLINE void +seekdir (ACE_DIR *d, long loc) +{ +#if defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_SEEKDIR) + ::seekdir (d, loc); +#else /* ! ACE_HAS_DIRENT || ACE_LACKS_SEEKDIR */ + ACE_UNUSED_ARG (d); + ACE_UNUSED_ARG (loc); +#endif /* ! ACE_HAS_DIRENT || ACE_LACKS_SEEKDIR */ +} + +ACE_INLINE long +telldir (ACE_DIR *d) +{ +#if defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_TELLDIR) + return ::telldir (d); +#else /* ! ACE_HAS_DIRENT || ACE_LACKS_TELLDIR */ + ACE_UNUSED_ARG (d); + ACE_NOTSUP_RETURN (-1); +#endif /* ! ACE_HAS_DIRENT || ACE_LACKS_TELLDIR */ +} + +} + +ACE_END_VERSIONED_NAMESPACE_DECL |