| 2004 | #endif |
| 2005 | |
| 2006 | static int cbm_json_mcp_snapshot_ownership(const char *document, size_t document_length, |
| 2007 | const char *const *object_path, size_t path_len, |
| 2008 | cbm_json_mcp_schema_t schema, const char *entry_name, |
| 2009 | const char *argument, const char *expected_binary, |
| 2010 | const char *previous_managed_binary, |
| 2011 | char **command_out) { |
| 2012 | cbm_json_like_object_field_t fields[3]; |
| 2013 | size_t field_count = cbm_json_mcp_ownership_fields(schema, argument, fields); |
| 2014 | char *command = NULL; |
| 2015 | int result = cbm_json_like_match_object_entry(document, document_length, object_path, path_len, |
| 2016 | entry_name, fields, field_count, &command); |
| 2017 | if ((result == CBM_JSON_LIKE_OBJECT_MATCH || |
| 2018 | result == CBM_JSON_LIKE_OBJECT_MATCH_WITH_EXTRAS) && |
| 2019 | !cbm_json_mcp_owned_command(command, expected_binary, previous_managed_binary)) { |
| 2020 | #ifdef _WIN32 |
| 2021 | bool had_extras = result == CBM_JSON_LIKE_OBJECT_MATCH_WITH_EXTRAS; |
| 2022 | result = |
| 2023 | cbm_json_mcp_command_availability(command) == CBM_JSON_MCP_COMMAND_MISSING |
| 2024 | ? (had_extras ? CBM_JSON_MCP_OWNERSHIP_EXTRAS_STALE : CBM_JSON_MCP_OWNERSHIP_STALE) |
| 2025 | : CBM_JSON_LIKE_OBJECT_MISMATCH; |
| 2026 | #else |
| 2027 | result = CBM_JSON_LIKE_OBJECT_MISMATCH; |
| 2028 | #endif |
| 2029 | } |
| 2030 | if (command_out) { |
| 2031 | *command_out = command; |
| 2032 | } else { |
| 2033 | free(command); |
| 2034 | } |
| 2035 | return result; |
| 2036 | } |
| 2037 | |
| 2038 | /* Render just the `command` member's VALUE for a schema — the raw JSON the |
| 2039 | * field-level repair splices in place of a moved install's stale path. */ |
no test coverage detected