mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 01:37:00 +00:00
627 lines
16 KiB
C++
627 lines
16 KiB
C++
// -*- C++ -*-
|
|
//
|
|
// $Id: OS_NS_stdlib.inl 97921 2014-10-10 21:58:31Z shuston $
|
|
|
|
#include "ace/config-all.h" /* Need ACE_TRACE */
|
|
#include "ace/Object_Manager_Base.h"
|
|
#include "ace/OS_NS_string.h"
|
|
#include "ace/Global_Macros.h"
|
|
#include "ace/os_include/os_errno.h"
|
|
#include "ace/os_include/os_search.h"
|
|
#if defined (ACE_ANDROID) && (__ANDROID_API__ < 19)
|
|
# include "ace/os_include/os_signal.h"
|
|
#endif
|
|
|
|
#if defined (ACE_WCHAR_IN_STD_NAMESPACE)
|
|
# define ACE_WCHAR_STD_NAMESPACE std
|
|
#else
|
|
# define ACE_WCHAR_STD_NAMESPACE ACE_STD_NAMESPACE
|
|
#endif /* ACE_WCHAR_IN_STD_NAMESPACE */
|
|
|
|
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
|
|
|
|
// Doesn't need a macro since it *never* returns!
|
|
|
|
ACE_INLINE void
|
|
ACE_OS::_exit (int status)
|
|
{
|
|
ACE_OS_TRACE ("ACE_OS::_exit");
|
|
#if defined (ACE_VXWORKS)
|
|
::exit (status);
|
|
#elif !defined (ACE_HAS_WINCE)
|
|
::_exit (status);
|
|
#else
|
|
::TerminateProcess (::GetCurrentProcess (), status);
|
|
#endif /* ACE_VXWORKS */
|
|
}
|
|
|
|
ACE_INLINE void
|
|
ACE_OS::abort (void)
|
|
{
|
|
#if defined (ACE_ANDROID) && (__ANDROID_API__ < 19)
|
|
ACE_OS::_exit (128 + SIGABRT);
|
|
#elif !defined (ACE_LACKS_ABORT)
|
|
::abort ();
|
|
#else
|
|
exit (1);
|
|
#endif /* !ACE_LACKS_ABORT */
|
|
}
|
|
|
|
ACE_INLINE int
|
|
ACE_OS::atexit (ACE_EXIT_HOOK func, const char* name)
|
|
{
|
|
return ACE_OS_Object_Manager::instance ()->at_exit (func, name);
|
|
}
|
|
|
|
ACE_INLINE int
|
|
ACE_OS::atoi (const char *s)
|
|
{
|
|
ACE_OSCALL_RETURN (::atoi (s), int, -1);
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE int
|
|
ACE_OS::atoi (const wchar_t *s)
|
|
{
|
|
#if defined (ACE_WIN32) && defined (ACE_HAS_WTOI)
|
|
ACE_OSCALL_RETURN (::_wtoi (s), int, -1);
|
|
#else /* ACE_WIN32 */
|
|
return ACE_OS::atoi (ACE_Wide_To_Ascii (s).char_rep ());
|
|
#endif /* ACE_WIN32 */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR */
|
|
|
|
ACE_INLINE long
|
|
ACE_OS::atol (const char *s)
|
|
{
|
|
ACE_OSCALL_RETURN (::atol (s), long, -1);
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE long
|
|
ACE_OS::atol (const wchar_t *s)
|
|
{
|
|
#if defined (ACE_WIN32) && defined (ACE_HAS_WTOL)
|
|
ACE_OSCALL_RETURN (::_wtol (s), long, -1);
|
|
#else /* ACE_WIN32 */
|
|
return ACE_OS::atol (ACE_Wide_To_Ascii (s).char_rep ());
|
|
#endif /* ACE_WIN32 */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR */
|
|
|
|
ACE_INLINE double
|
|
ACE_OS::atof (const char *s)
|
|
{
|
|
ACE_OSCALL_RETURN (::atof (s), double, -1);
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE double
|
|
ACE_OS::atof (const wchar_t *s)
|
|
{
|
|
#if !defined (ACE_HAS_WTOF)
|
|
return ACE_OS::atof (ACE_Wide_To_Ascii (s).char_rep ());
|
|
#elif defined (ACE_WTOF_EQUIVALENT)
|
|
ACE_OSCALL_RETURN (ACE_WTOF_EQUIVALENT (s), double, -1);
|
|
#else /* ACE_HAS__WTOF */
|
|
ACE_OSCALL_RETURN (::wtof (s), double, -1);
|
|
#endif /* ACE_HAS_WTOF */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR */
|
|
|
|
ACE_INLINE void *
|
|
ACE_OS::atop (const char *s)
|
|
{
|
|
ACE_TRACE ("ACE_OS::atop");
|
|
#if defined (ACE_WIN64)
|
|
intptr_t ip = ::_atoi64 (s);
|
|
#elif defined (ACE_OPENVMS)
|
|
# if !defined (__INITIAL_POINTER_SIZE) || (__INITIAL_POINTER_SIZE < 64)
|
|
int ip = ::atoi (s);
|
|
# else
|
|
intptr_t ip = ::atoi (s);
|
|
# endif
|
|
#else
|
|
intptr_t ip = ::atoi (s);
|
|
#endif /* ACE_WIN64 */
|
|
void * p = reinterpret_cast<void *> (ip);
|
|
return p;
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE void *
|
|
ACE_OS::atop (const wchar_t *s)
|
|
{
|
|
# if defined (ACE_WIN64)
|
|
intptr_t ip = ::_wtoi64 (s);
|
|
# elif defined (ACE_OPENVMS)
|
|
# if !defined (__INITIAL_POINTER_SIZE) || (__INITIAL_POINTER_SIZE < 64)
|
|
int ip = ACE_OS::atoi (s);
|
|
# else
|
|
intptr_t ip = ACE_OS::atoi (s);
|
|
# endif
|
|
# else
|
|
intptr_t ip = ACE_OS::atoi (s);
|
|
# endif /* ACE_WIN64 */
|
|
void * p = reinterpret_cast<void *> (ip);
|
|
return p;
|
|
}
|
|
#endif /* ACE_HAS_WCHAR */
|
|
|
|
ACE_INLINE void *
|
|
ACE_OS::bsearch (const void *key,
|
|
const void *base,
|
|
size_t nel,
|
|
size_t size,
|
|
ACE_COMPARE_FUNC compar)
|
|
{
|
|
#if !defined (ACE_LACKS_BSEARCH)
|
|
return ::bsearch (key, base, nel, size, compar);
|
|
#else
|
|
ACE_UNUSED_ARG (key);
|
|
ACE_UNUSED_ARG (base);
|
|
ACE_UNUSED_ARG (nel);
|
|
ACE_UNUSED_ARG (size);
|
|
ACE_UNUSED_ARG (compar);
|
|
ACE_NOTSUP_RETURN (0);
|
|
#endif /* ACE_LACKS_BSEARCH */
|
|
}
|
|
|
|
ACE_INLINE char *
|
|
ACE_OS::getenv (const char *symbol)
|
|
{
|
|
ACE_OS_TRACE ("ACE_OS::getenv");
|
|
#if defined (ACE_LACKS_GETENV)
|
|
ACE_UNUSED_ARG (symbol);
|
|
ACE_NOTSUP_RETURN (0);
|
|
#else /* ACE_LACKS_GETENV */
|
|
ACE_OSCALL_RETURN (::getenv (symbol), char *, 0);
|
|
#endif /* ACE_LACKS_GETENV */
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR) && defined (ACE_WIN32)
|
|
ACE_INLINE wchar_t *
|
|
ACE_OS::getenv (const wchar_t *symbol)
|
|
{
|
|
#if defined (ACE_LACKS_GETENV)
|
|
ACE_UNUSED_ARG (symbol);
|
|
ACE_NOTSUP_RETURN (0);
|
|
#else
|
|
ACE_OSCALL_RETURN (::_wgetenv (symbol), wchar_t *, 0);
|
|
#endif /* ACE_LACKS_GETENV */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR && ACE_WIN32 */
|
|
|
|
ACE_INLINE char *
|
|
ACE_OS::itoa (int value, char *string, int radix)
|
|
{
|
|
#if !defined (ACE_HAS_ITOA)
|
|
return ACE_OS::itoa_emulation (value, string, radix);
|
|
#elif defined (ACE_ITOA_EQUIVALENT)
|
|
return ACE_ITOA_EQUIVALENT (value, string, radix);
|
|
#else /* !ACE_HAS_ITOA */
|
|
return ::itoa (value, string, radix);
|
|
#endif /* !ACE_HAS_ITOA */
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE wchar_t *
|
|
ACE_OS::itoa (int value, wchar_t *string, int radix)
|
|
{
|
|
#if defined (ACE_LACKS_ITOW)
|
|
return ACE_OS::itow_emulation (value, string, radix);
|
|
#else /* ACE_LACKS_ITOW */
|
|
return ::_itow (value, string, radix);
|
|
#endif /* ACE_LACKS_ITOW */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR */
|
|
|
|
ACE_INLINE ACE_HANDLE
|
|
ACE_OS::mkstemp (char *s)
|
|
{
|
|
#if !defined (ACE_LACKS_MKSTEMP)
|
|
return ::mkstemp (s);
|
|
#elif defined (ACE_USES_WCHAR)
|
|
// For wide-char filesystems, we must convert the narrow-char input to
|
|
// a wide-char string for mkstemp_emulation(), then convert the name
|
|
// back to narrow-char for the caller.
|
|
ACE_Ascii_To_Wide wide_s (s);
|
|
const ACE_HANDLE fh = ACE_OS::mkstemp_emulation (wide_s.wchar_rep ());
|
|
if (fh != ACE_INVALID_HANDLE)
|
|
{
|
|
ACE_Wide_To_Ascii narrow_s (wide_s.wchar_rep ());
|
|
ACE_OS::strcpy (s, narrow_s.char_rep ());
|
|
}
|
|
return fh;
|
|
#else
|
|
return ACE_OS::mkstemp_emulation (s);
|
|
#endif /* !ACE_LACKS_MKSTEMP */
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE ACE_HANDLE
|
|
ACE_OS::mkstemp (wchar_t *s)
|
|
{
|
|
# if !defined (ACE_LACKS_MKSTEMP)
|
|
// For wide-char filesystems, we must convert the wide-char input to
|
|
// a narrow-char string for mkstemp(), then convert the name
|
|
// back to wide-char for the caller.
|
|
ACE_Wide_To_Ascii narrow_s (s);
|
|
const ACE_HANDLE fh = ::mkstemp (narrow_s.char_rep ());
|
|
if (fh != ACE_INVALID_HANDLE)
|
|
{
|
|
ACE_Ascii_To_Wide wide_s (narrow_s.char_rep ());
|
|
ACE_OS::strcpy (s, wide_s.wchar_rep ());
|
|
}
|
|
return fh;
|
|
# elif defined (ACE_USES_WCHAR)
|
|
return ACE_OS::mkstemp_emulation (s);
|
|
# else
|
|
// For wide-char filesystems, we must convert the wide-char input to
|
|
// a narrow-char string for mkstemp_emulation(), then convert the name
|
|
// back to wide-char for the caller.
|
|
ACE_Wide_To_Ascii narrow_s (s);
|
|
const ACE_HANDLE fh = ACE_OS::mkstemp_emulation (narrow_s.char_rep ());
|
|
if (fh != ACE_INVALID_HANDLE)
|
|
{
|
|
ACE_Ascii_To_Wide wide_s (narrow_s.char_rep ());
|
|
ACE_OS::strcpy (s, wide_s.wchar_rep ());
|
|
}
|
|
return fh;
|
|
# endif /* !ACE_LACKS_MKSTEMP */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR */
|
|
|
|
#if !defined (ACE_DISABLE_MKTEMP)
|
|
|
|
# if !defined (ACE_LACKS_MKTEMP)
|
|
ACE_INLINE char *
|
|
ACE_OS::mktemp (char *s)
|
|
{
|
|
# if defined (ACE_WIN32)
|
|
return ::_mktemp (s);
|
|
# else /* ACE_WIN32 */
|
|
return ::mktemp (s);
|
|
# endif /* ACE_WIN32 */
|
|
}
|
|
|
|
# if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE wchar_t *
|
|
ACE_OS::mktemp (wchar_t *s)
|
|
{
|
|
# if defined (ACE_WIN32)
|
|
return ::_wmktemp (s);
|
|
# else
|
|
// For narrow-char filesystems, we must convert the wide-char input to
|
|
// a narrow-char string for mktemp (), then convert the name back to
|
|
// wide-char for the caller.
|
|
ACE_Wide_To_Ascii narrow_s (s);
|
|
if (::mktemp (narrow_s.char_rep ()) == 0)
|
|
return 0;
|
|
ACE_Ascii_To_Wide wide_s (narrow_s.char_rep ());
|
|
ACE_OS::strcpy (s, wide_s.wchar_rep ());
|
|
return s;
|
|
# endif
|
|
}
|
|
# endif /* ACE_HAS_WCHAR */
|
|
|
|
# endif /* !ACE_LACKS_MKTEMP */
|
|
#endif /* !ACE_DISABLE_MKTEMP */
|
|
|
|
ACE_INLINE int
|
|
ACE_OS::putenv (const char *string)
|
|
{
|
|
ACE_OS_TRACE ("ACE_OS::putenv");
|
|
#if defined (ACE_LACKS_PUTENV) && defined (ACE_HAS_SETENV)
|
|
int result = 0;
|
|
char *sp = ACE_OS::strchr (const_cast <char *> (string), '=');
|
|
if (sp)
|
|
{
|
|
char *stmp = ACE_OS::strdup (string);
|
|
if (stmp)
|
|
{
|
|
stmp[sp - string] = '\0';
|
|
result = ACE_OS::setenv (stmp, sp+sizeof (char), 1);
|
|
ACE_OS::free (stmp);
|
|
}
|
|
else
|
|
{
|
|
errno = ENOMEM;
|
|
result = -1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
result = ACE_OS::setenv (string, "", 1);
|
|
}
|
|
|
|
return result;
|
|
#elif defined (ACE_LACKS_PUTENV)
|
|
ACE_UNUSED_ARG (string);
|
|
ACE_NOTSUP_RETURN (0);
|
|
#else /* ! ACE_HAS_WINCE */
|
|
ACE_OSCALL_RETURN (ACE_STD_NAMESPACE::putenv (const_cast <char *> (string)), int, -1);
|
|
#endif /* ACE_LACKS_PUTENV && ACE_HAS_SETENV */
|
|
}
|
|
|
|
ACE_INLINE int
|
|
ACE_OS::setenv(const char *envname, const char *envval, int overwrite)
|
|
{
|
|
#if defined (ACE_LACKS_SETENV)
|
|
ACE_UNUSED_ARG (envname);
|
|
ACE_UNUSED_ARG (envval);
|
|
ACE_UNUSED_ARG (overwrite);
|
|
ACE_NOTSUP_RETURN (-1);
|
|
#else
|
|
ACE_OSCALL_RETURN (ACE_STD_NAMESPACE::setenv (envname, envval, overwrite), int, -1);
|
|
#endif
|
|
}
|
|
|
|
ACE_INLINE int
|
|
ACE_OS::unsetenv(const char *name)
|
|
{
|
|
#if defined (ACE_LACKS_UNSETENV)
|
|
ACE_UNUSED_ARG (name);
|
|
ACE_NOTSUP_RETURN (-1);
|
|
#else
|
|
# if defined (ACE_HAS_VOID_UNSETENV)
|
|
::unsetenv (name);
|
|
return 0;
|
|
#else
|
|
ACE_OSCALL_RETURN (ACE_STD_NAMESPACE::unsetenv (name), int, -1);
|
|
# endif /* ACE_HAS_VOID_UNSETENV */
|
|
#endif /* ACE_LACKS_UNSETENV */
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR) && defined (ACE_WIN32)
|
|
ACE_INLINE int
|
|
ACE_OS::putenv (const wchar_t *string)
|
|
{
|
|
ACE_OS_TRACE ("ACE_OS::putenv");
|
|
#if defined (ACE_LACKS_PUTENV)
|
|
ACE_UNUSED_ARG (string);
|
|
ACE_NOTSUP_RETURN (-1);
|
|
#else
|
|
ACE_OSCALL_RETURN (::_wputenv (string), int, -1);
|
|
#endif /* ACE_LACKS_PUTENV */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR && ACE_WIN32 */
|
|
|
|
ACE_INLINE void
|
|
ACE_OS::qsort (void *base,
|
|
size_t nel,
|
|
size_t width,
|
|
ACE_COMPARE_FUNC compar)
|
|
{
|
|
#if !defined (ACE_LACKS_QSORT)
|
|
::qsort (base, nel, width, compar);
|
|
#else
|
|
ACE_UNUSED_ARG (base);
|
|
ACE_UNUSED_ARG (nel);
|
|
ACE_UNUSED_ARG (width);
|
|
ACE_UNUSED_ARG (compar);
|
|
#endif /* !ACE_LACKS_QSORT */
|
|
}
|
|
|
|
ACE_INLINE int
|
|
ACE_OS::rand (void)
|
|
{
|
|
ACE_OS_TRACE ("ACE_OS::rand");
|
|
ACE_OSCALL_RETURN (::rand (), int, -1);
|
|
}
|
|
|
|
ACE_INLINE int
|
|
ACE_OS::rand_r (unsigned int *seed)
|
|
{
|
|
ACE_OS_TRACE ("ACE_OS::rand_r");
|
|
#if defined (ACE_LACKS_RAND_R)
|
|
long new_seed = (long) *seed;
|
|
if (new_seed == 0)
|
|
new_seed = 0x12345987;
|
|
long temp = new_seed / 127773;
|
|
new_seed = 16807 * (new_seed - temp * 127773) - 2836 * temp;
|
|
if (new_seed < 0)
|
|
new_seed += 2147483647;
|
|
*seed = (unsigned int)new_seed;
|
|
return (int) (new_seed & RAND_MAX);
|
|
#else
|
|
return ::rand_r (seed);
|
|
# endif /* ACE_LACKS_RAND_R */
|
|
}
|
|
|
|
# if !defined (ACE_LACKS_REALPATH)
|
|
ACE_INLINE char *
|
|
ACE_OS::realpath (const char *file_name,
|
|
char *resolved_name)
|
|
{
|
|
# if defined (ACE_WIN32)
|
|
return ::_fullpath (resolved_name, file_name, PATH_MAX);
|
|
# else /* ACE_WIN32 */
|
|
return ::realpath (file_name, resolved_name);
|
|
# endif /* ! ACE_WIN32 */
|
|
}
|
|
|
|
# if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE wchar_t *
|
|
ACE_OS::realpath (const wchar_t *file_name,
|
|
wchar_t *resolved_name)
|
|
{
|
|
# if defined (ACE_WIN32)
|
|
return ::_wfullpath (resolved_name, file_name, PATH_MAX);
|
|
# else /* ACE_WIN32 */
|
|
ACE_Wide_To_Ascii n_file_name (file_name);
|
|
char n_resolved[PATH_MAX];
|
|
if (0 != ACE_OS::realpath (n_file_name.char_rep (), n_resolved))
|
|
{
|
|
ACE_Ascii_To_Wide w_resolved (n_resolved);
|
|
ACE_OS::strcpy (resolved_name, w_resolved.wchar_rep ());
|
|
return resolved_name;
|
|
}
|
|
return 0;
|
|
# endif /* ! ACE_WIN32 */
|
|
}
|
|
# endif /* ACE_HAS_WCHAR */
|
|
#endif /* ACE_HAS_WINCE */
|
|
|
|
ACE_INLINE ACE_EXIT_HOOK
|
|
ACE_OS::set_exit_hook (ACE_EXIT_HOOK exit_hook)
|
|
{
|
|
ACE_EXIT_HOOK old_hook = exit_hook_;
|
|
exit_hook_ = exit_hook;
|
|
return old_hook;
|
|
}
|
|
|
|
ACE_INLINE void
|
|
ACE_OS::srand (u_int seed)
|
|
{
|
|
ACE_OS_TRACE ("ACE_OS::srand");
|
|
::srand (seed);
|
|
}
|
|
|
|
#if !defined (ACE_LACKS_STRTOD)
|
|
ACE_INLINE double
|
|
ACE_OS::strtod (const char *s, char **endptr)
|
|
{
|
|
return ::strtod (s, endptr);
|
|
}
|
|
#endif /* !ACE_LACKS_STRTOD */
|
|
|
|
#if defined (ACE_HAS_WCHAR) && !defined (ACE_LACKS_WCSTOD)
|
|
ACE_INLINE double
|
|
ACE_OS::strtod (const wchar_t *s, wchar_t **endptr)
|
|
{
|
|
return ACE_WCHAR_STD_NAMESPACE::wcstod (s, endptr);
|
|
}
|
|
#endif /* ACE_HAS_WCHAR && !ACE_LACKS_WCSTOD */
|
|
|
|
ACE_INLINE long
|
|
ACE_OS::strtol (const char *s, char **ptr, int base)
|
|
{
|
|
#if defined (ACE_LACKS_STRTOL)
|
|
return ACE_OS::strtol_emulation (s, ptr, base);
|
|
#else /* ACE_LACKS_STRTOL */
|
|
return ::strtol (s, ptr, base);
|
|
#endif /* ACE_LACKS_STRTOL */
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE long
|
|
ACE_OS::strtol (const wchar_t *s, wchar_t **ptr, int base)
|
|
{
|
|
#if defined (ACE_LACKS_WCSTOL)
|
|
return ACE_OS::wcstol_emulation (s, ptr, base);
|
|
#else
|
|
return ACE_WCHAR_STD_NAMESPACE::wcstol (s, ptr, base);
|
|
#endif /* ACE_LACKS_WCSTOL */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR */
|
|
|
|
ACE_INLINE unsigned long
|
|
ACE_OS::strtoul (const char *s, char **ptr, int base)
|
|
{
|
|
#if defined (ACE_LACKS_STRTOUL)
|
|
return ACE_OS::strtoul_emulation (s, ptr, base);
|
|
#else /* ACE_LACKS_STRTOUL */
|
|
return ::strtoul (s, ptr, base);
|
|
#endif /* ACE_LACKS_STRTOUL */
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE unsigned long
|
|
ACE_OS::strtoul (const wchar_t *s, wchar_t **ptr, int base)
|
|
{
|
|
#if defined (ACE_LACKS_WCSTOUL)
|
|
return ACE_OS::wcstoul_emulation (s, ptr, base);
|
|
#else
|
|
return ACE_WCHAR_STD_NAMESPACE::wcstoul (s, ptr, base);
|
|
#endif /* ACE_LACKS_WCSTOUL */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR */
|
|
|
|
ACE_INLINE ACE_INT64
|
|
ACE_OS::strtoll (const char *s, char **ptr, int base)
|
|
{
|
|
#if defined (ACE_LACKS_STRTOLL)
|
|
return ACE_OS::strtoll_emulation (s, ptr, base);
|
|
#elif defined (ACE_STRTOLL_EQUIVALENT)
|
|
return ACE_STRTOLL_EQUIVALENT (s, ptr, base);
|
|
#else
|
|
return ace_strtoll_helper (s, ptr, base);
|
|
#endif /* ACE_LACKS_STRTOLL */
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE ACE_INT64
|
|
ACE_OS::strtoll (const wchar_t *s, wchar_t **ptr, int base)
|
|
{
|
|
#if defined (ACE_LACKS_WCSTOLL)
|
|
return ACE_OS::wcstoll_emulation (s, ptr, base);
|
|
#elif defined (ACE_WCSTOLL_EQUIVALENT)
|
|
return ACE_WCSTOLL_EQUIVALENT (s, ptr, base);
|
|
#else
|
|
return ACE_WCHAR_STD_NAMESPACE::wcstoll (s, ptr, base);
|
|
#endif /* ACE_LACKS_WCSTOLL */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR */
|
|
|
|
ACE_INLINE ACE_UINT64
|
|
ACE_OS::strtoull (const char *s, char **ptr, int base)
|
|
{
|
|
#if defined (ACE_LACKS_STRTOULL)
|
|
return ACE_OS::strtoull_emulation (s, ptr, base);
|
|
#elif defined (ACE_STRTOULL_EQUIVALENT)
|
|
return ACE_STRTOULL_EQUIVALENT (s, ptr, base);
|
|
#else
|
|
return ace_strtoull_helper (s, ptr, base);
|
|
#endif /* ACE_LACKS_STRTOULL */
|
|
}
|
|
|
|
#if defined (ACE_HAS_WCHAR)
|
|
ACE_INLINE ACE_UINT64
|
|
ACE_OS::strtoull (const wchar_t *s, wchar_t **ptr, int base)
|
|
{
|
|
#if defined (ACE_LACKS_WCSTOULL)
|
|
return ACE_OS::wcstoull_emulation (s, ptr, base);
|
|
#elif defined (ACE_WCSTOULL_EQUIVALENT)
|
|
return ACE_WCSTOULL_EQUIVALENT (s, ptr, base);
|
|
#else
|
|
return ACE_WCHAR_STD_NAMESPACE::wcstoull (s, ptr, base);
|
|
#endif /* ACE_LACKS_WCSTOULL */
|
|
}
|
|
#endif /* ACE_HAS_WCHAR */
|
|
|
|
ACE_INLINE int
|
|
ACE_OS::system (const ACE_TCHAR *s)
|
|
{
|
|
// ACE_OS_TRACE ("ACE_OS::system");
|
|
#if defined (ACE_LACKS_SYSTEM)
|
|
ACE_UNUSED_ARG (s);
|
|
ACE_NOTSUP_RETURN (-1);
|
|
#elif defined (ACE_WIN32) && defined (ACE_USES_WCHAR)
|
|
ACE_OSCALL_RETURN (::_wsystem (s), int, -1);
|
|
#else
|
|
ACE_OSCALL_RETURN (::system (ACE_TEXT_ALWAYS_CHAR (s)), int, -1);
|
|
#endif /* ACE_LACKS_SYSTEM */
|
|
}
|
|
|
|
ACE_INLINE const char*
|
|
ACE_OS::getprogname ()
|
|
{
|
|
#if defined (ACE_HAS_GETPROGNAME)
|
|
return ::getprogname ();
|
|
#else
|
|
return ACE_OS::getprogname_emulation ();
|
|
#endif /* ACE_HAS_GETPROGNAME */
|
|
}
|
|
|
|
ACE_INLINE void
|
|
ACE_OS::setprogname (const char* name)
|
|
{
|
|
#if defined (ACE_HAS_SETPROGNAME)
|
|
::setprogname (name);
|
|
#else
|
|
ACE_OS::setprogname_emulation (name);
|
|
#endif /* ACE_HAS_SETPROGNAME */
|
|
}
|
|
|
|
ACE_END_VERSIONED_NAMESPACE_DECL
|