// -*- 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 (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); // 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 (ACE_HAS_3_PARAM_READDIR_R) return ::readdir_r (dirp, entry, result); # else // had better not be 0! *result = ::readdir_r (dirp, entry); return 0; # endif /* sun */ #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 using 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 (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 (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