static void jackctl_server_free_internals ( struct jackctl_server * server_ptr) { JSList * next_node_ptr; struct jackctl_internal * internal_ptr; while (server_ptr->internals) { next_node_ptr = server_ptr->internals->next; internal_ptr = (struct jackctl_internal*)server_ptr->internals->data; jackctl_free_driver_parameters ((struct jackctl_driver*)internal_ptr); free (internal_ptr->desc_ptr->params); free (internal_ptr->desc_ptr); free (internal_ptr); free (server_ptr->internals); server_ptr->internals = next_node_ptr; } }
static void jackctl_server_free_drivers ( struct jackctl_server * server_ptr) { JSList * next_node_ptr; struct jackctl_driver * driver_ptr; while (server_ptr->drivers) { next_node_ptr = server_ptr->drivers->next; driver_ptr = (struct jackctl_driver*)server_ptr->drivers->data; jackctl_free_driver_parameters (driver_ptr); free (driver_ptr->desc_ptr->params); free (driver_ptr->desc_ptr); free (driver_ptr); free (server_ptr->drivers); server_ptr->drivers = next_node_ptr; } }
static bool jackctl_add_driver_parameters( struct jackctl_driver * driver_ptr) { uint32_t i; union jackctl_parameter_value jackctl_value; jackctl_param_type_t jackctl_type; struct jackctl_parameter * parameter_ptr; jack_driver_param_desc_t * descriptor_ptr; for (i = 0 ; i < driver_ptr->desc_ptr->nparams ; i++) { descriptor_ptr = driver_ptr->desc_ptr->params + i; switch (descriptor_ptr->type) { case JackDriverParamInt: jackctl_type = JackParamInt; jackctl_value.i = descriptor_ptr->value.i; break; case JackDriverParamUInt: jackctl_type = JackParamUInt; jackctl_value.ui = descriptor_ptr->value.ui; break; case JackDriverParamChar: jackctl_type = JackParamChar; jackctl_value.c = descriptor_ptr->value.c; break; case JackDriverParamString: jackctl_type = JackParamString; strcpy(jackctl_value.str, descriptor_ptr->value.str); break; case JackDriverParamBool: jackctl_type = JackParamBool; jackctl_value.b = descriptor_ptr->value.i; break; default: jack_error("unknown driver parameter type %i", (int)descriptor_ptr->type); assert(0); goto fail; } parameter_ptr = jackctl_add_parameter( &driver_ptr->parameters, descriptor_ptr->character, descriptor_ptr->name, descriptor_ptr->short_desc, descriptor_ptr->long_desc, jackctl_type, NULL, NULL, jackctl_value, descriptor_ptr->constraint); if (parameter_ptr == NULL) { goto fail; } parameter_ptr->driver_ptr = driver_ptr; } return true; fail: jackctl_free_driver_parameters(driver_ptr); return false; }