| 103 | static void outputByType(OutputType output, HeadsetControlStatus* status, HeadsetInfo* infos, bool print_capabilities); |
| 104 | |
| 105 | void output(DeviceList* deviceList, bool print_capabilities, OutputType output) |
| 106 | { |
| 107 | int num_devices = deviceList ? deviceList->num_devices : 0; |
| 108 | |
| 109 | HeadsetControlStatus status = initializeStatus(num_devices); |
| 110 | HeadsetInfo* infos = NULL; |
| 111 | if (num_devices > 0) { |
| 112 | infos = calloc(num_devices, sizeof(HeadsetInfo)); |
| 113 | } |
| 114 | |
| 115 | // Suppress static analysis warning |
| 116 | assert((infos != NULL && status.device_count > 0) || (infos == NULL && status.device_count == 0)); |
| 117 | |
| 118 | // Iterate through all devices |
| 119 | for (int deviceIndex = 0; deviceIndex < num_devices; deviceIndex++) { |
| 120 | initializeHeadsetInfo(&infos[deviceIndex], deviceList[deviceIndex].device); |
| 121 | processFeatureRequests(&infos[deviceIndex], deviceList[deviceIndex].featureRequests, deviceList[deviceIndex].size, deviceList[deviceIndex].device); |
| 122 | } |
| 123 | |
| 124 | // Send all gathered information to respective output function |
| 125 | outputByType(output, &status, infos, print_capabilities); |
| 126 | |
| 127 | for (int i = 0; i < num_devices; i++) { |
| 128 | free(infos[i].idVendor); |
| 129 | free(infos[i].idProduct); |
| 130 | |
| 131 | for (int j = 0; j < infos[i].error_count; j++) { |
| 132 | free(infos[i].errors[j].source); |
| 133 | free(infos[i].errors[j].message); |
| 134 | } |
| 135 | |
| 136 | for (int j = 0; j < infos[i].action_count; j++) { |
| 137 | free(infos[i].actions[j].device); |
| 138 | free(infos[i].actions[j].error_message); |
| 139 | } |
| 140 | } |
| 141 | free(infos); |
| 142 | } |
| 143 | |
| 144 | HeadsetControlStatus initializeStatus(int num_devices) |
| 145 | { |
no test coverage detected