| 545 | } |
| 546 | |
| 547 | static bool worker_unique_file(char *out, size_t out_size, const char *kind) { |
| 548 | if (!out || out_size == 0 || !kind || !kind[0]) { |
| 549 | return false; |
| 550 | } |
| 551 | char cache_copy[INDEX_WORKER_PATH_CAP] = {0}; |
| 552 | bool have_cache = worker_cache_dir(cache_copy); |
| 553 | int written; |
| 554 | if (have_cache) { |
| 555 | char directory[INDEX_WORKER_PATH_CAP]; |
| 556 | written = snprintf(directory, sizeof(directory), "%s/logs", cache_copy); |
| 557 | if (written <= 0 || written >= (int)sizeof(directory) || !cbm_mkdir_p(directory, 0700)) { |
| 558 | return false; |
| 559 | } |
| 560 | written = snprintf(out, out_size, "%s/.worker-%s-XXXXXX", directory, kind); |
| 561 | } else { |
| 562 | written = snprintf(out, out_size, ".worker-%s-XXXXXX", kind); |
| 563 | } |
| 564 | if (written <= 0 || written >= (int)out_size) { |
| 565 | out[0] = '\0'; |
| 566 | return false; |
| 567 | } |
| 568 | worker_tmp_lock(); |
| 569 | int descriptor = cbm_mkstemp(out); |
| 570 | worker_tmp_unlock(); |
| 571 | if (descriptor < 0) { |
| 572 | out[0] = '\0'; |
| 573 | return false; |
| 574 | } |
| 575 | (void)worker_close(descriptor); |
| 576 | return true; |
| 577 | } |
| 578 | |
| 579 | static bool worker_result_succeeded(const cbm_index_worker_result_t *result) { |
| 580 | return result && result->outcome == CBM_PROC_CLEAN && !result->cancellation_requested && |
no test coverage detected