summaryrefslogtreecommitdiff
path: root/ACE/ace/OS_NS_pwd.inl
diff options
context:
space:
mode:
authorolli <olli@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2011-03-11 12:12:40 +0000
committerolli <olli@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2011-03-11 12:12:40 +0000
commit8757d55d32fca9a07a3434ce8f53d2f6d7d54605 (patch)
tree0ebf07e7bc836df6cfca84368fda88c8ad14030d /ACE/ace/OS_NS_pwd.inl
parent6560923ab7f2ab855eb5b1320d0b984d6d28c890 (diff)
downloadATCD-8757d55d32fca9a07a3434ce8f53d2f6d7d54605.tar.gz
ChangeLogTag: Fri Mar 11 12:09:00 UTC 2011 Olli Savia <ops@iki.fi>
Diffstat (limited to 'ACE/ace/OS_NS_pwd.inl')
-rw-r--r--ACE/ace/OS_NS_pwd.inl78
1 files changed, 18 insertions, 60 deletions
diff --git a/ACE/ace/OS_NS_pwd.inl b/ACE/ace/OS_NS_pwd.inl
index 99ece415aa5..b8d03a0e824 100644
--- a/ACE/ace/OS_NS_pwd.inl
+++ b/ACE/ace/OS_NS_pwd.inl
@@ -37,71 +37,29 @@ ACE_OS::getpwnam (const char *name)
#endif /* ACE_LACKS_PWD_FUNCTIONS */
}
-ACE_INLINE struct passwd *
-ACE_OS::getpwnam_r (const char *name, struct passwd *pwent,
- char *buffer, int buflen)
+ACE_INLINE int
+ACE_OS::getpwnam_r (const char *name,
+ struct passwd *pwd,
+ char *buffer,
+ size_t bufsize,
+ struct passwd **result)
{
-#if defined (ACE_HAS_POSIX_GETPWNAM_R)
- struct passwd *result = 0;
-
- int const status = ::getpwnam_r (name, pwent, buffer, buflen, &result);
-
- if (status != 0)
- {
- errno = status;
- result = 0;
- }
- return result;
-#elif !defined (ACE_LACKS_PWD_FUNCTIONS)
-# if defined (ACE_HAS_REENTRANT_FUNCTIONS)
-# if !defined (ACE_LACKS_PWD_REENTRANT_FUNCTIONS)
-# if defined (ACE_HAS_PTHREADS) && \
- !defined (ACE_HAS_STHREADS) || \
- defined (HPUX_11)
- struct passwd *result = 0;
- int status;
- // VAC++ doesn't correctly grok the ::getpwnam_r - the function is redefined
- // in pwd.h, and that redefinition is used here
-# if defined (__IBMCPP__) && (__IBMCPP__ >= 400) /* VAC++ 4 */
- status = _posix_getpwnam_r (name, pwent, buffer, buflen, &result);
-# else
- status = ::getpwnam_r (name, pwent, buffer, buflen, &result);
-# endif /* __IBMCPP__ && (__IBMCPP__ >= 400) */
- if (status != 0)
- {
- errno = status;
- result = 0;
- }
- return result;
-# elif defined (AIX)
- if (::getpwnam_r (name, pwent, buffer, buflen) == -1)
- return 0;
- else
- return pwent;
-# else
- return ::getpwnam_r (name, pwent, buffer, buflen);
-# endif /* ACE_HAS_PTHREADS */
-# else
- ACE_UNUSED_ARG (name);
- ACE_UNUSED_ARG (pwent);
- ACE_UNUSED_ARG (buffer);
- ACE_UNUSED_ARG (buflen);
- ACE_NOTSUP_RETURN (0);
-# endif /* ! ACE_LACKS_PWD_REENTRANT_FUNCTIONS */
-# else
+#if defined (ACE_LACKS_PWD_FUNCTIONS)
ACE_UNUSED_ARG (name);
- ACE_UNUSED_ARG (pwent);
+ ACE_UNUSED_ARG (pwd);
ACE_UNUSED_ARG (buffer);
- ACE_UNUSED_ARG (buflen);
+ ACE_UNUSED_ARG (bufsize);
+ ACE_UNUSED_ARG (result);
ACE_NOTSUP_RETURN (0);
-# endif /* ACE_HAS_REENTRANT_FUNCTIONS */
+#elif defined (ACE_HAS_NONSTD_GETPWNAM_R)
+ if (::getpwnam_r (pwd, const_cast<char*>(name), buffer, bufsize) == -1)
+ return -1;
+
+ *result = pwd;
+ return 0;
#else
- ACE_UNUSED_ARG (name);
- ACE_UNUSED_ARG (pwent);
- ACE_UNUSED_ARG (buffer);
- ACE_UNUSED_ARG (buflen);
- ACE_NOTSUP_RETURN (0);
-#endif /* ACE_HAS_POSIX_GETPWNAM_R */
+ return ::getpwnam_r (name, pwd, buffer, bufsize, result);
+#endif /* ACE_LACKS_PWD_FUNCTIONS */
}
ACE_INLINE void