OS_NS_dirent.inl

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // $Id: OS_NS_dirent.inl 80826 2008-03-04 14:51:23Z wotte $
00004 
00005 #include "ace/OS_Memory.h"
00006 
00007 #if defined (ACE_LACKS_ALPHASORT)
00008 # include "ace/OS_NS_string.h"
00009 #endif /* ACE_LACKS_ALPHASORT */
00010 
00011 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00012 
00013 namespace ACE_OS
00014 {
00015 
00016 ACE_INLINE void
00017 closedir (ACE_DIR *d)
00018 {
00019 #if defined (ACE_HAS_DIRENT)
00020 # if defined (ACE_WIN32) && defined (ACE_LACKS_CLOSEDIR)
00021   ACE_OS::closedir_emulation (d);
00022   delete [] d->directory_name_;
00023   delete d;
00024 # elif defined (ACE_HAS_WCLOSEDIR) && defined (ACE_USES_WCHAR)
00025   ::wclosedir (d);
00026 # else /* ACE_WIN32 && ACE_LACKS_CLOSEDIR */
00027   ::closedir (d);
00028 # endif /* ACE_WIN32 && ACE_LACKS_CLOSEDIR */
00029 
00030 #else /* ACE_HAS_DIRENT */
00031   ACE_UNUSED_ARG (d);
00032 #endif /* ACE_HAS_DIRENT */
00033 }
00034 
00035 ACE_INLINE ACE_DIR *
00036 opendir (const ACE_TCHAR *filename)
00037 {
00038 #if defined (ACE_HAS_DIRENT)
00039 #    if defined (ACE_WIN32) && defined (ACE_LACKS_OPENDIR)
00040   return ::ACE_OS::opendir_emulation (filename);
00041 #  elif defined (ACE_HAS_WOPENDIR) && defined (ACE_USES_WCHAR)
00042   return ::wopendir (filename);
00043 #    elif defined (ACE_HAS_NONCONST_OPENDIR)
00044   return ::opendir (const_cast<char *> (filename));
00045 #    else /* ! ACE_WIN32 && ACE_LACKS_OPENDIR */
00046   return ::opendir (ACE_TEXT_ALWAYS_CHAR (filename));
00047 #    endif /* ACE_WIN32 && ACE_LACKS_OPENDIR */
00048 #else
00049   ACE_UNUSED_ARG (filename);
00050   ACE_NOTSUP_RETURN (0);
00051 #endif /* ACE_HAS_DIRENT */
00052 }
00053 
00054 ACE_INLINE struct ACE_DIRENT *
00055 readdir (ACE_DIR *d)
00056 {
00057 #if defined (ACE_HAS_DIRENT)
00058 #  if defined (ACE_WIN32) && defined (ACE_LACKS_READDIR)
00059      return ACE_OS::readdir_emulation (d);
00060 #  elif defined (ACE_HAS_WREADDIR) && defined (ACE_USES_WCHAR)
00061      return ::wreaddir (d);
00062 #  else /* ACE_WIN32 && ACE_LACKS_READDIR */
00063      return ::readdir (d);
00064 #  endif /* ACE_WIN32 && ACE_LACKS_READDIR */
00065 #else
00066   ACE_UNUSED_ARG (d);
00067   ACE_NOTSUP_RETURN (0);
00068 #endif /* ACE_HAS_DIRENT */
00069 }
00070 
00071 ACE_INLINE int
00072 readdir_r (ACE_DIR *dirp,
00073            struct ACE_DIRENT *entry,
00074            struct ACE_DIRENT **result)
00075 {
00076 #if !defined (ACE_HAS_REENTRANT_FUNCTIONS)
00077   ACE_UNUSED_ARG (entry);
00078   // <result> has better not be 0!
00079   *result = ACE_OS::readdir (dirp);
00080   if (*result)
00081     return 0; // Keep iterating
00082   else
00083     return 1; // Oops, some type of error!
00084 #elif defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_READDIR_R)
00085 #  if defined (ACE_HAS_3_PARAM_READDIR_R)
00086        return ::readdir_r (dirp, entry, result);
00087 #  else
00088        // <result> had better not be 0!
00089        *result = ::readdir_r (dirp, entry);
00090        return 0;
00091 #  endif /* sun */
00092 #else  /* ! ACE_HAS_DIRENT  ||  ACE_LACKS_READDIR_R */
00093   ACE_UNUSED_ARG (dirp);
00094   ACE_UNUSED_ARG (entry);
00095   ACE_UNUSED_ARG (result);
00096   ACE_NOTSUP_RETURN (0);
00097 
00098 #endif /* ACE_HAS_REENTRANT_FUNCTIONS */
00099 }
00100 
00101 ACE_INLINE void
00102 rewinddir (ACE_DIR *d)
00103 {
00104 #if defined (ACE_HAS_DIRENT)
00105 #  if defined (ACE_HAS_WREWINDDIR) && defined (ACE_USES_WCHAR)
00106   ::wrewinddir (d);
00107 #  elif !defined (ACE_LACKS_REWINDDIR)
00108   ace_rewinddir_helper (d);
00109 #  else
00110   ACE_UNUSED_ARG (d);
00111 #  endif /* !defined (ACE_LACKS_REWINDDIR) */
00112 #endif /* ACE_HAS_DIRENT */
00113 }
00114 
00115 ACE_INLINE int
00116 scandir (const ACE_TCHAR *dirname,
00117          struct ACE_DIRENT **namelist[],
00118          ACE_SCANDIR_SELECTOR selector,
00119          ACE_SCANDIR_COMPARATOR comparator)
00120 {
00121 #if defined (ACE_HAS_SCANDIR)
00122   return ::scandir (ACE_TEXT_ALWAYS_CHAR (dirname),
00123                     namelist,
00124 #  if defined (ACE_SCANDIR_SEL_LACKS_CONST)
00125                     reinterpret_cast<ACE_SCANDIR_OS_SELECTOR> (selector),
00126 #  else
00127                     selector,
00128 #  endif /* ACE_SCANDIR_SEL_LACKS_CONST */
00129 #  if defined (ACE_SCANDIR_CMP_USES_VOIDPTR) || \
00130       defined (ACE_SCANDIR_CMP_USES_CONST_VOIDPTR)
00131                     reinterpret_cast<ACE_SCANDIR_OS_COMPARATOR> (comparator));
00132 #  else
00133                     comparator);
00134 #  endif /* ACE_SCANDIR_CMP_USES_VOIDPTR */
00135 
00136 #else /* ! defined ( ACE_HAS_SCANDIR) */
00137   return ACE_OS::scandir_emulation (dirname, namelist, selector, comparator);
00138 #endif /* ACE_HAS_SCANDIR */
00139 }
00140 
00141 ACE_INLINE int
00142 alphasort (const void *a, const void *b)
00143 {
00144 #if defined (ACE_LACKS_ALPHASORT)
00145   return ACE_OS::strcmp ((*static_cast<const struct ACE_DIRENT * const *>(a))->d_name,
00146                           (*static_cast<const struct ACE_DIRENT * const *>(b))->d_name);
00147 #else
00148 #  if defined (ACE_SCANDIR_CMP_USES_VOIDPTR)
00149   return ::alphasort (const_cast<void *>(a),
00150                       const_cast<void *>(b));
00151 #  elif defined (ACE_SCANDIR_CMP_USES_CONST_VOIDPTR)
00152   return ::alphasort (a, b);
00153 #  else
00154   return ::alphasort ((const struct ACE_DIRENT **)a,
00155                       (const struct ACE_DIRENT **)b);
00156 #  endif
00157 #endif
00158 }
00159 
00160 ACE_INLINE void
00161 seekdir (ACE_DIR *d, long loc)
00162 {
00163 #if defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_SEEKDIR)
00164   ::seekdir (d, loc);
00165 #else  /* ! ACE_HAS_DIRENT  ||  ACE_LACKS_SEEKDIR */
00166   ACE_UNUSED_ARG (d);
00167   ACE_UNUSED_ARG (loc);
00168 #endif /* ! ACE_HAS_DIRENT  ||  ACE_LACKS_SEEKDIR */
00169 }
00170 
00171 ACE_INLINE long
00172 telldir (ACE_DIR *d)
00173 {
00174 #if defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_TELLDIR)
00175   return ::telldir (d);
00176 #else  /* ! ACE_HAS_DIRENT  ||  ACE_LACKS_TELLDIR */
00177   ACE_UNUSED_ARG (d);
00178   ACE_NOTSUP_RETURN (-1);
00179 #endif /* ! ACE_HAS_DIRENT  ||  ACE_LACKS_TELLDIR */
00180 }
00181 
00182 }
00183 
00184 ACE_END_VERSIONED_NAMESPACE_DECL

Generated on Tue Feb 2 17:18:41 2010 for ACE by  doxygen 1.4.7