00001
00002
00003
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
00023 ::closedir (d);
00024 # endif
00025
00026 #else
00027 ACE_UNUSED_ARG (d);
00028 #endif
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
00042 return ::opendir (ACE_TEXT_ALWAYS_CHAR (filename));
00043 # endif
00044 #else
00045 ACE_UNUSED_ARG (filename);
00046 ACE_NOTSUP_RETURN (0);
00047 #endif
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
00060 return ::readdir (d);
00061 # endif
00062 #else
00063 ACE_UNUSED_ARG (d);
00064 ACE_NOTSUP_RETURN (0);
00065 #endif
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
00076 *result = ACE_OS::readdir (dirp);
00077 if (*result)
00078 return 0;
00079 else
00080 return 1;
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
00095 # else
00096 # if defined(__GNUC__) && defined (_AIX)
00097 return ::readdir_r (dirp, entry, result);
00098 # else
00099
00100 *result = ::readdir_r (dirp, entry);
00101 return 0;
00102 # endif
00103 # endif
00104 #else
00105 ACE_UNUSED_ARG (dirp);
00106 ACE_UNUSED_ARG (entry);
00107 ACE_UNUSED_ARG (result);
00108 ACE_NOTSUP_RETURN (0);
00109
00110 #endif
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
00123 ::rewinddir (d);
00124 # endif
00125 # else
00126
00127
00128 ::seekdir (d, long (0));
00129 # endif
00130 #else
00131 ACE_UNUSED_ARG (d);
00132 #endif
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
00151 #else
00152 return ACE_OS::scandir_emulation (dirname, namelist, selector, comparator);
00153 #endif
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
00162 ACE_UNUSED_ARG (d);
00163 ACE_UNUSED_ARG (loc);
00164 #endif
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
00173 ACE_UNUSED_ARG (d);
00174 ACE_NOTSUP_RETURN (-1);
00175 #endif
00176 }
00177
00178 }
00179
00180 ACE_END_VERSIONED_NAMESPACE_DECL