diff --git a/src/include/switch_core.h b/src/include/switch_core.h index 03e12a14c1..e6a98fd128 100644 --- a/src/include/switch_core.h +++ b/src/include/switch_core.h @@ -551,6 +551,15 @@ SWITCH_DECLARE(char *) switch_core_perform_strdup(_In_ switch_memory_pool_t *poo */ SWITCH_DECLARE(char *) switch_core_session_sprintf(_In_ switch_core_session_t *session, _In_z_ _Printf_format_string_ const char *fmt, ...); +/*! + \brief printf-style style printing routine. The data is output to a string allocated from the session + \param session a session to use for allocation + \param fmt The format of the string + \param ap The arguments to use while printing the data + \return The new string +*/ +SWITCH_DECLARE(char *) switch_core_session_vsprintf(switch_core_session_t *session, const char *fmt, va_list ap); + /*! \brief printf-style style printing routine. The data is output to a string allocated from the pool \param pool a pool to use for allocation @@ -560,6 +569,15 @@ SWITCH_DECLARE(char *) switch_core_session_sprintf(_In_ switch_core_session_t *s */ SWITCH_DECLARE(char *) switch_core_sprintf(_In_ switch_memory_pool_t *pool, _In_z_ _Printf_format_string_ const char *fmt, ...); +/*! + \brief printf-style style printing routine. The data is output to a string allocated from the pool + \param pool a pool to use for allocation + \param fmt The format of the string + \param ap The arguments to use while printing the data + \return The new string +*/ +SWITCH_DECLARE(char *) switch_core_vsprintf(switch_memory_pool_t *pool, _In_z_ _Printf_format_string_ const char *fmt, va_list ap); + /*! \brief Retrieve the memory pool from a session \param session the session to retrieve the pool from diff --git a/src/switch_core_memory.c b/src/switch_core_memory.c index 8b328e6c38..7255947080 100644 --- a/src/switch_core_memory.c +++ b/src/switch_core_memory.c @@ -171,19 +171,32 @@ SWITCH_DECLARE(char *) switch_core_session_sprintf(switch_core_session_t *sessio va_list ap; char *result = NULL; + va_start(ap, fmt); + result = switch_core_vsprintf(session->pool, fmt, ap); + va_end(ap); + + return result; +} + +SWITCH_DECLARE(char *) switch_core_session_vsprintf(switch_core_session_t *session, const char *fmt, va_list ap) +{ + return switch_core_vsprintf(session->pool, fmt, ap); +} + +SWITCH_DECLARE(char *) switch_core_vsprintf(switch_memory_pool_t *pool, const char *fmt, va_list ap) +{ + char *result = NULL; + + switch_assert(pool != NULL); + #ifdef LOCK_MORE #ifdef USE_MEM_LOCK switch_mutex_lock(memory_manager.mem_lock); #endif #endif - switch_assert(session != NULL); - switch_assert(session->pool != NULL); - va_start(ap, fmt); - - result = apr_pvsprintf(session->pool, fmt, ap); + result = apr_pvsprintf(pool, fmt, ap); switch_assert(result != NULL); - va_end(ap); #ifdef LOCK_MORE #ifdef USE_MEM_LOCK @@ -197,28 +210,11 @@ SWITCH_DECLARE(char *) switch_core_session_sprintf(switch_core_session_t *sessio SWITCH_DECLARE(char *) switch_core_sprintf(switch_memory_pool_t *pool, const char *fmt, ...) { va_list ap; - char *result = NULL; - - switch_assert(pool != NULL); - -#ifdef LOCK_MORE -#ifdef USE_MEM_LOCK - switch_mutex_lock(memory_manager.mem_lock); -#endif -#endif - + char *result; va_start(ap, fmt); - - result = apr_pvsprintf(pool, fmt, ap); - switch_assert(result != NULL); - va_end(ap); - -#ifdef LOCK_MORE -#ifdef USE_MEM_LOCK - switch_mutex_unlock(memory_manager.mem_lock); -#endif -#endif - + result = switch_core_vsprintf(pool, fmt, ap); + va_end(ap); + return result; }