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.inl185
1 files changed, 185 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..862dd7d07c3
--- /dev/null
+++ b/ACE/ace/OS_NS_dirent.inl
@@ -0,0 +1,185 @@
+// -*- 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 (sun) && (defined (_POSIX_PTHREAD_SEMANTICS) || \
+ (_FILE_OFFSET_BITS == 64) || \
+ (_POSIX_C_SOURCE - 0 >= 199506L))) || \
+ (!defined (sun) && (defined (ACE_HAS_PTHREADS_STD) || \
+ defined (ACE_HAS_PTHREADS_DRAFT7) || \
+ defined (_POSIX_SOURCE) || \
+ defined (__FreeBSD__) || \
+ defined (HPUX_11)))
+# if defined (__GNUG__) && defined (DIGITAL_UNIX)
+ return readdir_r (dirp, entry, result);
+# else
+ return ::readdir_r (dirp, entry, result);
+# endif /* defined (__GNUG__) && defined (DIGITAL_UNIX) */
+# else /* ! POSIX.1c - this is draft 4 or draft 6 */
+# if defined(__GNUC__) && defined (_AIX)
+ return ::readdir_r (dirp, entry, result);
+# else
+ // <result> had better not be 0!
+ *result = ::readdir_r (dirp, entry);
+ return 0;
+# endif /* AIX */
+# endif /* ! POSIX.1c */
+#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