diff options
author | olli <olli@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2011-03-11 12:12:40 +0000 |
---|---|---|
committer | olli <olli@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2011-03-11 12:12:40 +0000 |
commit | 8757d55d32fca9a07a3434ce8f53d2f6d7d54605 (patch) | |
tree | 0ebf07e7bc836df6cfca84368fda88c8ad14030d /ACE/ace/OS_NS_pwd.inl | |
parent | 6560923ab7f2ab855eb5b1320d0b984d6d28c890 (diff) | |
download | ATCD-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.inl | 78 |
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 |