qd_error_t qd_entity_set_stringf(qd_entity_t *entity, const char* attribute, const char *format, ...) { // Calculate the size char dummy[1]; va_list ap; va_start(ap, format); int len = vsnprintf(dummy, 1, format, ap); va_end(ap); char buf[len+1]; va_start(ap, format); vsnprintf(buf, len+1, format, ap); va_end(ap); return qd_entity_set_string(entity, attribute, buf); }
qd_error_t qd_entity_refresh_connector(qd_entity_t* entity, void *impl) { qd_connector_t *ct = (qd_connector_t*) impl; if (DEQ_SIZE(ct->conn_info_list) > 1) { qd_failover_item_list_t conn_info_list = ct->conn_info_list; qd_failover_item_t *item = DEQ_HEAD(conn_info_list); // // As you can see we are skipping the head of the list. The // first item in the list is always the original connection information // and we dont want to display that information as part of the failover list. // int arr_length = get_failover_info_length(conn_info_list); char failover_info[arr_length]; memset(failover_info, 0, sizeof(failover_info)); item = DEQ_NEXT(item); while(item) { if (item->scheme) { strcat(failover_info, item->scheme); strcat(failover_info, "://"); } if (item->host_port) { strcat(failover_info, item->host_port); } item = DEQ_NEXT(item); if (item) { strcat(failover_info, ", "); } } if (qd_entity_set_string(entity, "failoverList", failover_info) == 0) return QD_ERROR_NONE; } else { if (qd_entity_clear(entity, "failoverList") == 0) return QD_ERROR_NONE; } return qd_error_code(); }