ACE_TCHAR * ACE_Function_Node::make_func_name (ACE_TCHAR const * func_name) { // Preprocessor symbols will not be expanded if they are // stringified. Force the preprocessor to expand them during the // argument prescan by calling a macro that itself calls another // that performs the actual stringification. #if defined (ACE_HAS_VERSIONED_NAMESPACE) && ACE_HAS_VERSIONED_NAMESPACE == 1 # define ACE_MAKE_VERSIONED_NAMESPACE_NAME_STRING_IMPL(NAME) #NAME # define ACE_MAKE_VERSIONED_NAMESPACE_NAME_STRING(NAME) ACE_MAKE_VERSIONED_NAMESPACE_NAME_STRING_IMPL(NAME) # define ACE_VERSIONED_NAMESPACE_NAME_STRING ACE_MAKE_VERSIONED_NAMESPACE_NAME_STRING(ACE_VERSIONED_NAMESPACE_NAME) // Check if function is using the ACE naming convention. If so, // it is likely that the ACE factory function macros // (e.g. ACE_FACTORY_DECLARE) were used to declare and define it, so // mangle the function name to include the ACE versioned namespace // name as is done in the ACE macros. Otherwise, leave the function // name as is. static ACE_TCHAR const make_prefix[] = ACE_TEXT ("_make_"); static size_t const make_prefix_len = sizeof (make_prefix) / sizeof (make_prefix[0]) - 1; if (ACE_OS::strncmp (make_prefix, func_name, make_prefix_len) == 0) { static ACE_TCHAR const versioned_namespace_name[] = ACE_TEXT (ACE_VERSIONED_NAMESPACE_NAME_STRING) ACE_TEXT("_") ; // Null terminator included in versioned_namespace_name_len since // it is static constant. static size_t const versioned_namespace_name_len = sizeof (versioned_namespace_name) / sizeof (versioned_namespace_name[0]); // - 1; size_t const len = ACE_OS::strlen (func_name) + versioned_namespace_name_len; // + 1; // Null terminator. ACE_TCHAR * mangled_func_name; ACE_NEW_RETURN (mangled_func_name, ACE_TCHAR[len], 0); ACE_Auto_Basic_Array_Ptr<ACE_TCHAR> safe (mangled_func_name); ACE_OS::snprintf (mangled_func_name, len, ACE_TEXT ("%s%s%s"), make_prefix, versioned_namespace_name, func_name + make_prefix_len); return safe.release (); } #endif /* ACE_HAS_VERSIONED_NAMESPACE == 1 */ return ACE::strnew (func_name); }
void * ACE_Local_Memory_Pool::acquire (size_t nbytes, size_t &rounded_bytes) { ACE_TRACE ("ACE_Local_Memory_Pool::acquire"); rounded_bytes = this->round_up (nbytes); char *temp = 0; ACE_NEW_RETURN (temp, char[rounded_bytes], 0); ACE_Auto_Basic_Array_Ptr<char> cp (temp); if (this->allocated_chunks_.insert (cp.get ()) != 0) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("(%P|%t) insertion into set failed\n")), 0); return cp.release (); }