3 // $Id: OS_NS_dirent.inl 80826 2008-03-04 14:51:23Z wotte $
5 #include "ace/OS_Memory.h"
7 #if defined (ACE_LACKS_ALPHASORT)
8 # include "ace/OS_NS_string.h"
9 #endif /* ACE_LACKS_ALPHASORT */
11 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
19 #if defined (ACE_HAS_DIRENT)
20 # if defined (ACE_WIN32) && defined (ACE_LACKS_CLOSEDIR)
21 ACE_OS::closedir_emulation (d);
22 delete [] d->directory_name_;
24 # elif defined (ACE_HAS_WCLOSEDIR) && defined (ACE_USES_WCHAR)
26 # else /* ACE_WIN32 && ACE_LACKS_CLOSEDIR */
28 # endif /* ACE_WIN32 && ACE_LACKS_CLOSEDIR */
30 #else /* ACE_HAS_DIRENT */
32 #endif /* ACE_HAS_DIRENT */
36 opendir (const ACE_TCHAR *filename)
38 #if defined (ACE_HAS_DIRENT)
39 # if defined (ACE_WIN32) && defined (ACE_LACKS_OPENDIR)
40 return ::ACE_OS::opendir_emulation (filename);
41 # elif defined (ACE_HAS_WOPENDIR) && defined (ACE_USES_WCHAR)
42 return ::wopendir (filename);
43 # elif defined (ACE_HAS_NONCONST_OPENDIR)
44 return ::opendir (const_cast<char *> (filename));
45 # else /* ! ACE_WIN32 && ACE_LACKS_OPENDIR */
46 return ::opendir (ACE_TEXT_ALWAYS_CHAR (filename));
47 # endif /* ACE_WIN32 && ACE_LACKS_OPENDIR */
49 ACE_UNUSED_ARG (filename);
50 ACE_NOTSUP_RETURN (0);
51 #endif /* ACE_HAS_DIRENT */
54 ACE_INLINE struct ACE_DIRENT *
57 #if defined (ACE_HAS_DIRENT)
58 # if defined (ACE_WIN32) && defined (ACE_LACKS_READDIR)
59 return ACE_OS::readdir_emulation (d);
60 # elif defined (ACE_HAS_WREADDIR) && defined (ACE_USES_WCHAR)
61 return ::wreaddir (d);
62 # else /* ACE_WIN32 && ACE_LACKS_READDIR */
64 # endif /* ACE_WIN32 && ACE_LACKS_READDIR */
67 ACE_NOTSUP_RETURN (0);
68 #endif /* ACE_HAS_DIRENT */
72 readdir_r (ACE_DIR *dirp,
73 struct ACE_DIRENT *entry,
74 struct ACE_DIRENT **result)
76 #if !defined (ACE_HAS_REENTRANT_FUNCTIONS)
77 ACE_UNUSED_ARG (entry);
78 // <result> has better not be 0!
79 *result = ACE_OS::readdir (dirp);
81 return 0; // Keep iterating
83 return 1; // Oops, some type of error!
84 #elif defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_READDIR_R)
85 # if defined (ACE_HAS_3_PARAM_READDIR_R)
86 return ::readdir_r (dirp, entry, result);
88 // <result> had better not be 0!
89 *result = ::readdir_r (dirp, entry);
92 #else /* ! ACE_HAS_DIRENT || ACE_LACKS_READDIR_R */
93 ACE_UNUSED_ARG (dirp);
94 ACE_UNUSED_ARG (entry);
95 ACE_UNUSED_ARG (result);
96 ACE_NOTSUP_RETURN (0);
98 #endif /* ACE_HAS_REENTRANT_FUNCTIONS */
102 rewinddir (ACE_DIR *d)
104 #if defined (ACE_HAS_DIRENT)
105 # if defined (ACE_HAS_WREWINDDIR) && defined (ACE_USES_WCHAR)
107 # elif !defined (ACE_LACKS_REWINDDIR)
108 ace_rewinddir_helper (d);
111 # endif /* !defined (ACE_LACKS_REWINDDIR) */
112 #endif /* ACE_HAS_DIRENT */
116 scandir (const ACE_TCHAR *dirname,
117 struct ACE_DIRENT **namelist[],
118 ACE_SCANDIR_SELECTOR selector,
119 ACE_SCANDIR_COMPARATOR comparator)
121 #if defined (ACE_HAS_SCANDIR)
122 return ::scandir (ACE_TEXT_ALWAYS_CHAR (dirname),
124 # if defined (ACE_SCANDIR_SEL_LACKS_CONST)
125 reinterpret_cast<ACE_SCANDIR_OS_SELECTOR> (selector),
128 # endif /* ACE_SCANDIR_SEL_LACKS_CONST */
129 # if defined (ACE_SCANDIR_CMP_USES_VOIDPTR) || \
130 defined (ACE_SCANDIR_CMP_USES_CONST_VOIDPTR)
131 reinterpret_cast<ACE_SCANDIR_OS_COMPARATOR> (comparator));
134 # endif /* ACE_SCANDIR_CMP_USES_VOIDPTR */
136 #else /* ! defined ( ACE_HAS_SCANDIR) */
137 return ACE_OS::scandir_emulation (dirname, namelist, selector, comparator);
138 #endif /* ACE_HAS_SCANDIR */
142 alphasort (const void *a, const void *b)
144 #if defined (ACE_LACKS_ALPHASORT)
145 return ACE_OS::strcmp ((*static_cast<const struct ACE_DIRENT * const *>(a))->d_name,
146 (*static_cast<const struct ACE_DIRENT * const *>(b))->d_name);
148 # if defined (ACE_SCANDIR_CMP_USES_VOIDPTR)
149 return ::alphasort (const_cast<void *>(a),
150 const_cast<void *>(b));
151 # elif defined (ACE_SCANDIR_CMP_USES_CONST_VOIDPTR)
152 return ::alphasort (a, b);
154 return ::alphasort ((const struct ACE_DIRENT **)a,
155 (const struct ACE_DIRENT **)b);
161 seekdir (ACE_DIR *d, long loc)
163 #if defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_SEEKDIR)
165 #else /* ! ACE_HAS_DIRENT || ACE_LACKS_SEEKDIR */
167 ACE_UNUSED_ARG (loc);
168 #endif /* ! ACE_HAS_DIRENT || ACE_LACKS_SEEKDIR */
174 #if defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_TELLDIR)
175 return ::telldir (d);
176 #else /* ! ACE_HAS_DIRENT || ACE_LACKS_TELLDIR */
178 ACE_NOTSUP_RETURN (-1);
179 #endif /* ! ACE_HAS_DIRENT || ACE_LACKS_TELLDIR */
184 ACE_END_VERSIONED_NAMESPACE_DECL