| 565 | } |
| 566 | |
| 567 | static bool worker_unique_file(char *out, size_t out_size, const char *kind) { |
| 568 | if (!out || out_size == 0 || !kind || !kind[0]) { |
| 569 | return false; |
| 570 | } |
| 571 | char cache_copy[INDEX_WORKER_PATH_CAP] = {0}; |
| 572 | bool have_cache = worker_cache_dir(cache_copy); |
| 573 | int written; |
| 574 | if (have_cache) { |
| 575 | char directory[INDEX_WORKER_PATH_CAP]; |
| 576 | written = snprintf(directory, sizeof(directory), "%s/logs", cache_copy); |
| 577 | if (written <= 0 || written >= (int)sizeof(directory) || |
| 578 | !cbm_mkdir_p_ex(directory, 0700, CBM_MKDIR_FOLLOW_OWNED)) { |
| 579 | return false; |
| 580 | } |
| 581 | written = snprintf(out, out_size, "%s/.worker-%s-XXXXXX", directory, kind); |
| 582 | } else { |
| 583 | written = snprintf(out, out_size, ".worker-%s-XXXXXX", kind); |
| 584 | } |
| 585 | if (written <= 0 || written >= (int)out_size) { |
| 586 | out[0] = '\0'; |
| 587 | return false; |
| 588 | } |
| 589 | worker_tmp_lock(); |
| 590 | int descriptor = cbm_mkstemp(out); |
| 591 | worker_tmp_unlock(); |
| 592 | if (descriptor < 0) { |
| 593 | out[0] = '\0'; |
| 594 | return false; |
| 595 | } |
| 596 | (void)worker_close(descriptor); |
| 597 | return true; |
| 598 | } |
| 599 | |
| 600 | static bool worker_result_succeeded(const cbm_index_worker_result_t *result) { |
| 601 | return result && result->outcome == CBM_PROC_CLEAN && !result->cancellation_requested && |
no test coverage detected