| 86 | } |
| 87 | |
| 88 | static bool response_contains_json_fragment(const char *response, const char *fragment) { |
| 89 | if (!response || !fragment) { |
| 90 | return false; |
| 91 | } |
| 92 | if (strstr(response, fragment)) { |
| 93 | return true; |
| 94 | } |
| 95 | |
| 96 | char escaped[512]; |
| 97 | size_t out = 0; |
| 98 | for (size_t i = 0; fragment[i] && out + 2 < sizeof(escaped); i++) { |
| 99 | if (fragment[i] == '"') { |
| 100 | escaped[out++] = '\\'; |
| 101 | } |
| 102 | escaped[out++] = fragment[i]; |
| 103 | } |
| 104 | escaped[out] = '\0'; |
| 105 | return strstr(response, escaped) != NULL; |
| 106 | } |
| 107 | |
| 108 | static void restore_cache_dir(const char *saved_copy) { |
| 109 | if (saved_copy) { |
no outgoing calls
no test coverage detected