Derive tier siblings only from the exact shipped Verify basename. This keeps * vendor-specific suffixes such as .agent.md, .toml, and .json intact. */
| 7418 | /* Derive tier siblings only from the exact shipped Verify basename. This keeps |
| 7419 | * vendor-specific suffixes such as .agent.md, .toml, and .json intact. */ |
| 7420 | static int cbm_tiered_profile_path(const char *verify_path, cbm_graph_tier_t tier, char *output, |
| 7421 | size_t output_size) { |
| 7422 | static const char verify_basename[] = "codebase-memory"; |
| 7423 | if (!verify_path || !verify_path[0] || !output || output_size == 0U) { |
| 7424 | return CLI_ERR; |
| 7425 | } |
| 7426 | const char *basename = strrchr(verify_path, '/'); |
| 7427 | const char *backslash = strrchr(verify_path, '\\'); |
| 7428 | if (backslash && (!basename || backslash > basename)) { |
| 7429 | basename = backslash; |
| 7430 | } |
| 7431 | basename = basename ? basename + 1U : verify_path; |
| 7432 | size_t verify_len = strlen(verify_basename); |
| 7433 | if (strncmp(basename, verify_basename, verify_len) != 0 || basename[verify_len] != '.') { |
| 7434 | return CLI_ERR; |
| 7435 | } |
| 7436 | const char *slug = cbm_graph_tier_slug(tier); |
| 7437 | if (!slug) { |
| 7438 | return CLI_ERR; |
| 7439 | } |
| 7440 | const char *suffix = basename + verify_len; |
| 7441 | size_t directory_len = (size_t)(basename - verify_path); |
| 7442 | size_t slug_len = strlen(slug); |
| 7443 | size_t suffix_len = strlen(suffix); |
| 7444 | if (directory_len >= output_size || slug_len > output_size - directory_len - 1U || |
| 7445 | suffix_len > output_size - directory_len - slug_len - 1U) { |
| 7446 | return CLI_ERR; |
| 7447 | } |
| 7448 | memcpy(output, verify_path, directory_len); |
| 7449 | memcpy(output + directory_len, slug, slug_len); |
| 7450 | memcpy(output + directory_len + slug_len, suffix, suffix_len + 1U); |
| 7451 | return CLI_OK; |
| 7452 | } |
| 7453 | |
| 7454 | static cbm_graph_access_t cbm_tiered_profile_access(cbm_graph_profile_dialect_t dialect) { |
| 7455 | return cbm_graph_dialect_direct_capable(dialect) ? CBM_GRAPH_ACCESS_DIRECT |
no test coverage detected