summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Mitz <mitza@objectcomputing.com>2022-12-15 02:01:58 -0600
committerGitHub <noreply@github.com>2022-12-15 02:01:58 -0600
commit8022b6898339d0027578c0af19888dc8f2752b9c (patch)
tree486b5258beb8be4a036328cdbf978f82c174a93c
parent67518043f1e02e67b02f057f9b183354bb070fd0 (diff)
parent8e6ccc97292c56438e09268ed344d53b5b409591 (diff)
downloadATCD-8022b6898339d0027578c0af19888dc8f2752b9c.tar.gz
Merge pull request #1999 from DOCGroup/elliottc/disable_readdir_r
[ace6tao2] Allow disabling of ACE_OS::readdir_r
-rw-r--r--ACE/ace/Dirent.inl15
-rw-r--r--ACE/ace/OS_NS_dirent.cpp1
-rw-r--r--ACE/ace/OS_NS_dirent.h2
-rw-r--r--ACE/ace/OS_NS_dirent.inl2
4 files changed, 16 insertions, 4 deletions
diff --git a/ACE/ace/Dirent.inl b/ACE/ace/Dirent.inl
index 3e420f1cc71..04f6f716e7a 100644
--- a/ACE/ace/Dirent.inl
+++ b/ACE/ace/Dirent.inl
@@ -56,9 +56,18 @@ ACE_INLINE int
ACE_Dirent::read (struct ACE_DIRENT *entry,
struct ACE_DIRENT **result)
{
- return this->dirp_
- ? ACE_OS::readdir_r (this->dirp_, entry, result)
- : 0;
+ int status = EBADF;
+ if (this->dirp_ && entry && result)
+ {
+ ACE_DIRENT* ptr = ACE_OS::readdir (this->dirp_);
+ if (ptr)
+ {
+ *entry = *ptr;
+ }
+ *result = ptr;
+ status = 0;
+ }
+ return status;
}
ACE_INLINE void
diff --git a/ACE/ace/OS_NS_dirent.cpp b/ACE/ace/OS_NS_dirent.cpp
index 182667c7243..a5efb466c06 100644
--- a/ACE/ace/OS_NS_dirent.cpp
+++ b/ACE/ace/OS_NS_dirent.cpp
@@ -181,7 +181,6 @@ ACE_OS::scandir_emulation (const ACE_TCHAR *dirname,
int nfiles = 0;
int fail = 0;
- // @@ This code shoulduse readdir_r() rather than readdir().
for (dp = ACE_OS::readdir (dirp);
dp != 0;
dp = ACE_OS::readdir (dirp))
diff --git a/ACE/ace/OS_NS_dirent.h b/ACE/ace/OS_NS_dirent.h
index 8a35cd9f931..e19b4b1efb4 100644
--- a/ACE/ace/OS_NS_dirent.h
+++ b/ACE/ace/OS_NS_dirent.h
@@ -86,10 +86,12 @@ namespace ACE_OS {
ACE_NAMESPACE_INLINE_FUNCTION
struct ACE_DIRENT *readdir (ACE_DIR *);
+#if !defined (ACE_DISABLE_READDIR_R)
ACE_NAMESPACE_INLINE_FUNCTION
int readdir_r (ACE_DIR *dirp,
struct ACE_DIRENT *entry,
struct ACE_DIRENT **result);
+#endif /* !ACE_DISABLE_READDIR_R */
ACE_NAMESPACE_INLINE_FUNCTION
void rewinddir (ACE_DIR *);
diff --git a/ACE/ace/OS_NS_dirent.inl b/ACE/ace/OS_NS_dirent.inl
index 145ccb17970..ae7c291f18f 100644
--- a/ACE/ace/OS_NS_dirent.inl
+++ b/ACE/ace/OS_NS_dirent.inl
@@ -65,6 +65,7 @@ readdir (ACE_DIR *d)
#endif /* ACE_HAS_DIRENT */
}
+#if !defined (ACE_DISABLE_READDIR_R)
ACE_INLINE int
readdir_r (ACE_DIR *dirp,
struct ACE_DIRENT *entry,
@@ -94,6 +95,7 @@ readdir_r (ACE_DIR *dirp,
#endif /* ACE_HAS_REENTRANT_FUNCTIONS */
}
+#endif /* !ACE_DISABLE_READDIR_R */
ACE_INLINE void
rewinddir (ACE_DIR *d)