Go to the documentation of this file.00001
00002
00003
00004
00005 #include "ace/OS_Memory.h"
00006
00007 #if defined (ACE_LACKS_ALPHASORT)
00008 # include "ace/OS_NS_string.h"
00009 #endif
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
00027 ::closedir (d);
00028 # endif
00029
00030 #else
00031 ACE_UNUSED_ARG (d);
00032 #endif
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
00046 return ::opendir (ACE_TEXT_ALWAYS_CHAR (filename));
00047 # endif
00048 #else
00049 ACE_UNUSED_ARG (filename);
00050 ACE_NOTSUP_RETURN (0);
00051 #endif
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
00063 return ::readdir (d);
00064 # endif
00065 #else
00066 ACE_UNUSED_ARG (d);
00067 ACE_NOTSUP_RETURN (0);
00068 #endif
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
00079 *result = ACE_OS::readdir (dirp);
00080 if (*result)
00081 return 0;
00082 else
00083 return 1;
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
00089 *result = ::readdir_r (dirp, entry);
00090 return 0;
00091 # endif
00092 #else
00093 ACE_UNUSED_ARG (dirp);
00094 ACE_UNUSED_ARG (entry);
00095 ACE_UNUSED_ARG (result);
00096 ACE_NOTSUP_RETURN (0);
00097
00098 #endif
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
00112 #endif
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
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
00135
00136 #else
00137 return ACE_OS::scandir_emulation (dirname, namelist, selector, comparator);
00138 #endif
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
00166 ACE_UNUSED_ARG (d);
00167 ACE_UNUSED_ARG (loc);
00168 #endif
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
00177 ACE_UNUSED_ARG (d);
00178 ACE_NOTSUP_RETURN (-1);
00179 #endif
00180 }
00181
00182 }
00183
00184 ACE_END_VERSIONED_NAMESPACE_DECL