| 2576 | } |
| 2577 | |
| 2578 | bool cbm_daemon_runtime_request_stop(const cbm_daemon_ipc_endpoint_t *endpoint, |
| 2579 | const cbm_daemon_build_identity_t *identity, |
| 2580 | uint32_t timeout_ms, |
| 2581 | cbm_daemon_runtime_stop_result_t *result_out) { |
| 2582 | if (!result_out) { |
| 2583 | return false; |
| 2584 | } |
| 2585 | memset(result_out, 0, sizeof(*result_out)); |
| 2586 | uint8_t *payload = NULL; |
| 2587 | if (!runtime_control_request_send(endpoint, identity, CBM_DAEMON_RUNTIME_OP_STOP, timeout_ms, |
| 2588 | CBM_DAEMON_STOP_RESPONSE_SIZE, &payload)) { |
| 2589 | return false; |
| 2590 | } |
| 2591 | result_out->accepted = (payload[1] & 0x01U) != 0U; |
| 2592 | result_out->busy = (payload[1] & 0x02U) != 0U; |
| 2593 | result_out->committed_clients = (uint16_t)(((uint16_t)payload[2] << 8) | payload[3]); |
| 2594 | result_out->client_count = payload[4] > CBM_DAEMON_CONTROL_CLIENT_CAP |
| 2595 | ? (uint8_t)CBM_DAEMON_CONTROL_CLIENT_CAP |
| 2596 | : payload[4]; |
| 2597 | for (size_t index = 0; index < CBM_DAEMON_CONTROL_CLIENT_CAP; index++) { |
| 2598 | result_out->client_pids[index] = runtime_control_read_u32(payload + 8U + index * 4U); |
| 2599 | } |
| 2600 | free(payload); |
| 2601 | return true; |
| 2602 | } |
| 2603 | |
| 2604 | cbm_daemon_runtime_client_t *cbm_daemon_runtime_client_connect( |
| 2605 | const cbm_daemon_ipc_endpoint_t *endpoint, const cbm_daemon_build_identity_t *identity, |
no test coverage detected