summaryrefslogtreecommitdiff
path: root/ACE/ace/OS_NS_dirent.inl
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/OS_NS_dirent.inl')
-rw-r--r--ACE/ace/OS_NS_dirent.inl169
1 files changed, 169 insertions, 0 deletions
diff --git a/ACE/ace/OS_NS_dirent.inl b/ACE/ace/OS_NS_dirent.inl
new file mode 100644
index 00000000000..a768a914887
--- /dev/null
+++ b/ACE/ace/OS_NS_dirent.inl
@@ -0,0 +1,169 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "ace/OS_Memory.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace ACE_OS
+{
+
+ACE_INLINE void
+closedir (ACE_DIR *d)
+{
+#if defined (ACE_HAS_DIRENT)
+# if defined (ACE_WIN32) && defined (ACE_LACKS_CLOSEDIR)
+ ACE_OS::closedir_emulation (d);
+ delete [] d->directory_name_;
+ delete d;
+# elif defined (ACE_HAS_WCLOSEDIR) && defined (ACE_USES_WCHAR)
+ ::wclosedir (d);
+# else /* ACE_WIN32 && ACE_LACKS_CLOSEDIR */
+ ::closedir (d);
+# endif /* ACE_WIN32 && ACE_LACKS_CLOSEDIR */
+
+#else /* ACE_HAS_DIRENT */
+ ACE_UNUSED_ARG (d);
+#endif /* ACE_HAS_DIRENT */
+}
+
+ACE_INLINE ACE_DIR *
+opendir (const ACE_TCHAR *filename)
+{
+#if defined (ACE_HAS_DIRENT)
+# if defined (ACE_WIN32) && defined (ACE_LACKS_OPENDIR)
+ return ::ACE_OS::opendir_emulation (filename);
+# elif defined (ACE_HAS_WOPENDIR) && defined (ACE_USES_WCHAR)
+ return ::wopendir (filename);
+# elif defined (ACE_HAS_NONCONST_OPENDIR)
+ return ::opendir (const_cast<char *> (filename));
+# else /* ! ACE_WIN32 && ACE_LACKS_OPENDIR */
+ return ::opendir (ACE_TEXT_ALWAYS_CHAR (filename));
+# endif /* ACE_WIN32 && ACE_LACKS_OPENDIR */
+#else
+ ACE_UNUSED_ARG (filename);
+ ACE_NOTSUP_RETURN (0);
+#endif /* ACE_HAS_DIRENT */
+}
+
+ACE_INLINE struct ACE_DIRENT *
+readdir (ACE_DIR *d)
+{
+#if defined (ACE_HAS_DIRENT)
+# if defined (ACE_WIN32) && defined (ACE_LACKS_READDIR)
+ return ACE_OS::readdir_emulation (d);
+# elif defined (ACE_HAS_WREADDIR) && defined (ACE_USES_WCHAR)
+ return ::wreaddir (d);
+# else /* ACE_WIN32 && ACE_LACKS_READDIR */
+ return ::readdir (d);
+# endif /* ACE_WIN32 && ACE_LACKS_READDIR */
+#else
+ ACE_UNUSED_ARG (d);
+ ACE_NOTSUP_RETURN (0);
+#endif /* ACE_HAS_DIRENT */
+}
+
+ACE_INLINE int
+readdir_r (ACE_DIR *dirp,
+ struct ACE_DIRENT *entry,
+ struct ACE_DIRENT **result)
+{
+#if !defined (ACE_HAS_REENTRANT_FUNCTIONS)
+ ACE_UNUSED_ARG (entry);
+ // <result> has better not be 0!
+ *result = ACE_OS::readdir (dirp);
+ if (*result)
+ return 0; // Keep iterating
+ else
+ return 1; // Oops, some type of error!
+#elif defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_READDIR_R)
+# if defined (ACE_HAS_3_PARAM_READDIR_R)
+ return ::readdir_r (dirp, entry, result);
+# else
+ // <result> had better not be 0!
+ *result = ::readdir_r (dirp, entry);
+ return 0;
+# endif /* sun */
+#else /* ! ACE_HAS_DIRENT || ACE_LACKS_READDIR_R */
+ ACE_UNUSED_ARG (dirp);
+ ACE_UNUSED_ARG (entry);
+ ACE_UNUSED_ARG (result);
+ ACE_NOTSUP_RETURN (0);
+
+#endif /* ACE_HAS_REENTRANT_FUNCTIONS */
+}
+
+ACE_INLINE void
+rewinddir (ACE_DIR *d)
+{
+#if defined (ACE_HAS_DIRENT)
+# if defined (ACE_LACKS_SEEKDIR)
+# if defined (ACE_LACKS_REWINDDIR)
+ ACE_UNUSED_ARG (d);
+# elif defined (ACE_HAS_WREWINDDIR) && defined (ACE_USES_WCHAR)
+ ::wrewinddir (d);
+# else /* ! defined (ACE_LACKS_REWINDDIR) */
+ ::rewinddir (d);
+# endif /* ! defined (ACE_LACKS_REWINDDIR) */
+# else /* ! ACE_LACKS_SEEKDIR */
+ // We need to implement <rewinddir> using <seekdir> since it's often
+ // defined as a macro...
+ ::seekdir (d, long (0));
+# endif /* ! ACE_LACKS_SEEKDIR */
+#else
+ ACE_UNUSED_ARG (d);
+#endif /* ACE_HAS_DIRENT */
+}
+
+ACE_INLINE int
+scandir (const ACE_TCHAR *dirname,
+ struct ACE_DIRENT **namelist[],
+ ACE_SCANDIR_SELECTOR selector,
+ ACE_SCANDIR_COMPARATOR comparator)
+{
+#if defined (ACE_HAS_SCANDIR)
+ return ::scandir (ACE_TEXT_ALWAYS_CHAR (dirname),
+ namelist,
+# if defined (ACE_SCANDIR_SEL_LACKS_CONST)
+ reinterpret_cast<ACE_SCANDIR_OS_SELECTOR> (selector),
+# else
+ selector,
+# endif /* ACE_SCANDIR_SEL_LACKS_CONST */
+# if defined (ACE_SCANDIR_CMP_USES_VOIDPTR) || \
+ defined (ACE_SCANDIR_CMP_USES_CONST_VOIDPTR)
+ reinterpret_cast<ACE_SCANDIR_OS_COMPARATOR> (comparator));
+# else
+ comparator);
+# endif /* ACE_SCANDIR_CMP_USES_VOIDPTR */
+
+#else /* ! defined ( ACE_HAS_SCANDIR) */
+ return ACE_OS::scandir_emulation (dirname, namelist, selector, comparator);
+#endif /* ACE_HAS_SCANDIR */
+}
+
+ACE_INLINE void
+seekdir (ACE_DIR *d, long loc)
+{
+#if defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_SEEKDIR)
+ ::seekdir (d, loc);
+#else /* ! ACE_HAS_DIRENT || ACE_LACKS_SEEKDIR */
+ ACE_UNUSED_ARG (d);
+ ACE_UNUSED_ARG (loc);
+#endif /* ! ACE_HAS_DIRENT || ACE_LACKS_SEEKDIR */
+}
+
+ACE_INLINE long
+telldir (ACE_DIR *d)
+{
+#if defined (ACE_HAS_DIRENT) && !defined (ACE_LACKS_TELLDIR)
+ return ::telldir (d);
+#else /* ! ACE_HAS_DIRENT || ACE_LACKS_TELLDIR */
+ ACE_UNUSED_ARG (d);
+ ACE_NOTSUP_RETURN (-1);
+#endif /* ! ACE_HAS_DIRENT || ACE_LACKS_TELLDIR */
+}
+
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL