| 797 | } |
| 798 | |
| 799 | static size_t count_retained_source_bytes(CBMFileResult **result_cache, int file_count, |
| 800 | int *retained_count) { |
| 801 | size_t retained_bytes = 0; |
| 802 | int count = 0; |
| 803 | |
| 804 | for (int i = 0; i < file_count; i++) { |
| 805 | CBMFileResult *result = result_cache[i]; |
| 806 | if (result && result->source) { |
| 807 | retained_bytes += (size_t)result->source_len; |
| 808 | count++; |
| 809 | } |
| 810 | } |
| 811 | |
| 812 | if (retained_count) { |
| 813 | *retained_count = count; |
| 814 | } |
| 815 | return retained_bytes; |
| 816 | } |
| 817 | |
| 818 | /* retain_sources=false disables source retention entirely: no result->source is |
| 819 | * kept, yet extraction still produces defs/nodes. Guards the low-RAM opt-out. */ |