OS_NS_dirent.inl

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

Generated on Thu Nov 9 09:41:57 2006 for ACE by doxygen 1.3.6