diff options
Diffstat (limited to 'ace/OS_NS_stdlib.inl')
-rw-r--r-- | ace/OS_NS_stdlib.inl | 114 |
1 files changed, 67 insertions, 47 deletions
diff --git a/ace/OS_NS_stdlib.inl b/ace/OS_NS_stdlib.inl index 0762d7443f5..6f6ca83c71f 100644 --- a/ace/OS_NS_stdlib.inl +++ b/ace/OS_NS_stdlib.inl @@ -8,6 +8,8 @@ #include "ace/Global_Macros.h" #include "ace/os_include/os_errno.h" #include "ace/os_include/os_search.h" +#include "ace/os_include/os_limits.h" +//#include "ace/TSS_T.h" #if defined(ACE_WCHAR_IN_STD_NAMESPACE) # define ACE_WCHAR_STD_NAMESPACE std @@ -65,17 +67,15 @@ 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) ACE_OSCALL_RETURN (::_wtoi (s), int, -1); #else /* ACE_WIN32 */ - return ACE_OS::atoi (ACE_Wide_To_Ascii(s).char_rep()); + return ACE_OS::atoi (ACE_TEXT_TO_CHAR_IN (s)); #endif /* ACE_WIN32 */ } -#endif /* ACE_HAS_WCHAR */ #if defined (atop) # undef atop @@ -98,7 +98,6 @@ ACE_OS::atop (const char *s) return p; } -#if defined (ACE_HAS_WCHAR) ACE_INLINE void * ACE_OS::atop (const wchar_t *s) { @@ -110,7 +109,6 @@ ACE_OS::atop (const wchar_t *s) void *p = reinterpret_cast<void *> (ip); return p; } -#endif /* ACE_HAS_WCHAR */ ACE_INLINE void * ACE_OS::bsearch (const void *key, @@ -143,18 +141,31 @@ ACE_OS::getenv (const char *symbol) #endif /* ACE_LACKS_ENV */ } -#if defined (ACE_HAS_WCHAR) && defined (ACE_WIN32) ACE_INLINE wchar_t * ACE_OS::getenv (const wchar_t *symbol) { #if defined (ACE_LACKS_ENV) ACE_UNUSED_ARG (symbol); ACE_NOTSUP_RETURN (0); -#else +#elif defined (ACE_WIN32) ACE_OSCALL_RETURN (::_wgetenv (symbol), wchar_t *, 0); +#else +// Including ACE_TSS_T.h causes error! +/* + wchar_t* init = 0; + static ACE_TSS< wchar_t* > wvalue (&init); + ACE::String_Conversion::Allocator_malloc<wchar_t>().free(*wvalue); + *wvalue.ts_object() = ACE_TEXT_TO_MALLOC_WCHAR_OUT ( + ACE_OS::getenv (ACE_TEXT_TO_CHAR_IN (symbol))); + return *wvalue; +*/ + static wchar_t* wvalue = 0; + ACE::String_Conversion::Allocator_malloc<wchar_t>().free(wvalue); + wvalue = ACE_TEXT_TO_MALLOC_WCHAR_OUT ( + ACE_OS::getenv (ACE_TEXT_TO_CHAR_IN (symbol))); + return wvalue; #endif /* ACE_LACKS_ENV */ } -#endif /* ACE_HAS_WCHAR && ACE_WIN32 */ ACE_INLINE char * ACE_OS::itoa (int value, char *string, int radix) @@ -168,7 +179,6 @@ ACE_OS::itoa (int value, char *string, int radix) #endif /* !ACE_HAS_ITOA */ } -#if defined (ACE_HAS_WCHAR) ACE_INLINE wchar_t * ACE_OS::itoa (int value, wchar_t *string, int radix) { @@ -178,7 +188,6 @@ ACE_OS::itoa (int value, wchar_t *string, int radix) return ::_itow (value, string, radix); #endif /* ACE_LACKS_ITOW */ } -#endif /* ACE_HAS_WCHAR */ ACE_INLINE ACE_HANDLE ACE_OS::mkstemp (char *s) @@ -186,54 +195,56 @@ ACE_OS::mkstemp (char *s) #if !defined (ACE_LACKS_MKSTEMP) return ::mkstemp (s); #else - return ACE_OS::mkstemp_emulation (ACE_TEXT_CHAR_TO_TCHAR (s)); + return ACE_OS::mkstemp_emulation (ACE_TEXT_TO_TCHAR_INOUT (s) ); #endif /* !ACE_LACKS_MKSTEMP */ } -#if defined (ACE_HAS_WCHAR) ACE_INLINE ACE_HANDLE ACE_OS::mkstemp (wchar_t *s) { + s[0] = 0; # if !defined (ACE_LACKS_MKSTEMP) - return ::mkstemp (ACE_TEXT_WCHAR_TO_TCHAR (ACE_TEXT_ALWAYS_CHAR (s))); + ACE::String_Conversion::Convert_InOut<char, wchar_t> convert( s, PATH_MAX ); + return ::mkstemp (convert.c_str()); # else - return ACE_OS::mkstemp_emulation (ACE_TEXT_WCHAR_TO_TCHAR (s)); + ACE::String_Conversion::Convert_InOut<ACE_TCHAR, ACE_ANTI_TCHAR> convert( s, PATH_MAX ); + return ACE_OS::mkstemp_emulation (convert.c_str()); # endif /* !ACE_LACKS_MKSTEMP */ } -#endif /* ACE_HAS_WCHAR */ -#if !defined (ACE_LACKS_MKTEMP) + ACE_INLINE char * ACE_OS::mktemp (char *s) { # if defined (ACE_WIN32) return ::_mktemp (s); -# else /* ACE_WIN32 */ +# elif !defined (ACE_LACKS_MKTEMP) return ::mktemp (s); -# endif /* ACE_WIN32 */ +# else + ACE_UNUSED_ARG( s ); + ACE_NOTSUP_RETURN (0); +# endif } -# if defined (ACE_HAS_WCHAR) ACE_INLINE wchar_t * ACE_OS::mktemp (wchar_t *s) { -# if defined (ACE_WIN32) +#if defined (ACE_LACKS_MKTEMP) + ACE_UNUSED_ARG( s ); + ACE_NOTSUP_RETURN (0); +#elif defined (ACE_WIN32) return ::_wmktemp (s); -# else +#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) + s[0] = 0; + ACE::String_Conversion::Convert_InOut<char, wchar_t> convert( s, PATH_MAX ); + if (::mktemp (convert.c_str()) == 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 } -# endif /* ACE_HAS_WCHAR */ - -#endif /* !ACE_LACKS_MKTEMP */ #if defined(INTEGRITY) extern "C" { @@ -257,7 +268,7 @@ ACE_OS::putenv (const char *string) #endif /* ACE_HAS_WINCE */ } -#if defined (ACE_HAS_WCHAR) && defined (ACE_WIN32) +#if defined (ACE_WIN32) ACE_INLINE int ACE_OS::putenv (const wchar_t *string) { @@ -270,7 +281,7 @@ ACE_OS::putenv (const wchar_t *string) ACE_OSCALL_RETURN (::_wputenv (string), int, -1); #endif /* ACE_HAS_WINCE */ } -#endif /* ACE_HAS_WCHAR && ACE_WIN32 */ +#endif /* ACE_WIN32 */ ACE_INLINE void ACE_OS::qsort (void *base, @@ -357,7 +368,6 @@ ACE_OS::realpath (const char *file_name, } # endif /* !ACE_LACKS_REALPATH */ -# if defined (ACE_HAS_WCHAR) ACE_INLINE wchar_t * ACE_OS::realpath (const wchar_t *file_name, wchar_t *resolved_name) @@ -365,18 +375,15 @@ ACE_OS::realpath (const wchar_t *file_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)) + if (0 != ACE_OS::realpath ( ACE_TEXT_TO_CHAR_IN (file_name), n_resolved)) { - ACE_Ascii_To_Wide w_resolved (n_resolved); - ACE_OS::strcpy (resolved_name, w_resolved.wchar_rep ()); + ACE_OS::string_copy (resolved_name, n_resolved, PATH_MAX); return resolved_name; } return 0; # endif /* ! ACE_WIN32 */ } -# endif /* ACE_HAS_WCHAR */ #endif /* ACE_HAS_WINCE */ ACE_INLINE ACE_EXIT_HOOK @@ -419,8 +426,8 @@ ACE_OS::strenvdup (const ACE_TCHAR *str) # else // Use char * for environment on non-Windows. char *temp = 0; - if ((temp = ACE_OS::getenv (ACE_TEXT_ALWAYS_CHAR (&str[1]))) != 0) - return ACE_OS::strdup (ACE_TEXT_CHAR_TO_TCHAR (temp)); + if ((temp = ACE_OS::getenv (ACE_TEXT_TO_CHAR_IN(&str[1]))) != 0) + return ACE_OS::strdup (ACE_TEXT_TO_TCHAR_IN (temp)); # endif /* ACE_WIN32 */ return ACE_OS::strdup (str); } @@ -437,13 +444,16 @@ ACE_OS::strtod (const char *s, char **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); + #if !defined (ACE_LACKS_WCSTOD) + return ACE_WCHAR_STD_NAMESPACE::wcstod (s, endptr); + #else + ACE_UNUSED_ARG( s ); + ACE_NOTSUP_RETURN (0); + #endif } -#endif /* ACE_HAS_WCHAR && !ACE_LACKS_WCSTOD */ ACE_INLINE long ACE_OS::strtol (const char *s, char **ptr, int base) @@ -455,13 +465,18 @@ ACE_OS::strtol (const char *s, char **ptr, int base) #endif /* ACE_LACKS_STRTOL */ } -#if defined (ACE_HAS_WCHAR) && !defined (ACE_LACKS_WCSTOL) ACE_INLINE long ACE_OS::strtol (const wchar_t *s, wchar_t **ptr, int base) { +#if !defined (ACE_LACKS_WCSTOL) return ACE_WCHAR_STD_NAMESPACE::wcstol (s, ptr, base); +#else + ACE_UNUSED_ARG( s ); + ACE_UNUSED_ARG( ptr ); + ACE_UNUSED_ARG( base ); + ACE_NOTSUP_RETURN (0); +#endif } -#endif /* ACE_HAS_WCHAR && !ACE_LACKS_WCSTOL */ ACE_INLINE unsigned long ACE_OS::strtoul (const char *s, char **ptr, int base) @@ -473,13 +488,18 @@ ACE_OS::strtoul (const char *s, char **ptr, int base) #endif /* ACE_LACKS_STRTOUL */ } -#if defined (ACE_HAS_WCHAR) && !defined (ACE_LACKS_WCSTOUL) ACE_INLINE unsigned long ACE_OS::strtoul (const wchar_t *s, wchar_t **ptr, int base) { +#if !defined (ACE_LACKS_WCSTOUL) return ACE_WCHAR_STD_NAMESPACE::wcstoul (s, ptr, base); +#else + ACE_UNUSED_ARG( s ); + ACE_UNUSED_ARG( ptr ); + ACE_UNUSED_ARG( base ); + ACE_NOTSUP_RETURN (0); +#endif } -#endif /* ACE_HAS_WCHAR && !ACE_LACKS_WCSTOUL */ ACE_INLINE int ACE_OS::system (const ACE_TCHAR *s) @@ -493,7 +513,7 @@ ACE_OS::system (const ACE_TCHAR *s) #elif defined(ACE_TANDEM_T1248_PTHREADS) ACE_OSCALL_RETURN (::spt_system (s), int, -1); #else - ACE_OSCALL_RETURN (::system (ACE_TEXT_ALWAYS_CHAR (s)), int, -1); + ACE_OSCALL_RETURN (::system (ACE_TEXT_TO_CHAR_IN (s)), int, -1); #endif /* ACE_LACKS_SYSTEM */ } |