PJ_DEF(pj_pool_t*) pj_pool_create_on_buf(const char *name, void *buf, pj_size_t size) { #if PJ_HAS_POOL_ALT_API == 0 struct creation_param param; long align_diff; PJ_ASSERT_RETURN(buf && size, NULL); if (!is_initialized) { if (pool_buf_initialize() != PJ_SUCCESS) return NULL; is_initialized = 1; } /* Check and align buffer */ align_diff = (long)buf; if (align_diff & (PJ_POOL_ALIGNMENT-1)) { align_diff &= (PJ_POOL_ALIGNMENT-1); buf = (void*) (((char*)buf) + align_diff); size -= align_diff; } param.stack_buf = buf; param.size = size; pj_thread_local_set(tls, ¶m); return pj_pool_create_int(&stack_based_factory, name, size, 0, pj_pool_factory_default_policy.callback); #else PJ_UNUSED_ARG(buf); return pj_pool_create(NULL, name, size, size, NULL); #endif }
PJ_DEF(pj_pool_t*) pj_pool_create_on_buf(const char *name, void *buf, pj_size_t size) { struct creation_param param; PJ_ASSERT_RETURN(buf && size, NULL); if (!is_initialized) { if (pool_buf_initialize() != PJ_SUCCESS) return NULL; is_initialized = 1; } param.stack_buf = buf; param.size = size; pj_thread_local_set(tls, ¶m); return pj_pool_create_int(&stack_based_factory, name, size, 0, pj_pool_factory_default_policy.callback); }