SWITCH_DECLARE_NONSTD(switch_status_t) switch_console_stream_write(switch_stream_handle_t *handle, const char *fmt, ...) { va_list ap; char *buf = handle->data; char *end = handle->end; int ret = 0; char *data = NULL; if (handle->data_len >= handle->data_size) { return SWITCH_STATUS_FALSE; } va_start(ap, fmt); //ret = switch_vasprintf(&data, fmt, ap); if (!(data = switch_vmprintf(fmt, ap))) { ret = -1; } va_end(ap); if (data) { switch_size_t remaining = handle->data_size - handle->data_len; switch_size_t need = strlen(data) + 1; if ((remaining < need) && handle->alloc_len) { switch_size_t new_len; void *new_data; new_len = handle->data_size + need + handle->alloc_chunk; if ((new_data = realloc(handle->data, new_len))) { handle->data_size = handle->alloc_len = new_len; handle->data = new_data; buf = handle->data; remaining = handle->data_size - handle->data_len; handle->end = (uint8_t *) (handle->data) + handle->data_len; end = handle->end; } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); free(data); return SWITCH_STATUS_FALSE; } } if (remaining < need) { ret = -1; } else { ret = 0; switch_snprintf(end, remaining, "%s", data); handle->data_len = strlen(buf); handle->end = (uint8_t *) (handle->data) + handle->data_len; } free(data); } return ret ? SWITCH_STATUS_FALSE : SWITCH_STATUS_SUCCESS; }
SWITCH_DECLARE(cJSON *) cJSON_CreateStringPrintf(const char *fmt, ...) { va_list ap; char *str; cJSON *item; va_start(ap, fmt); str = switch_vmprintf(fmt, ap); va_end(ap); if (!str) return NULL; if ((item = cJSON_New_Item())) { item->type=cJSON_String; item->valuestring = str; } else { free(str); } return item; }