| 608 | } |
| 609 | |
| 610 | static bool application_unique_recovery_file(char out[APPLICATION_PATH_CAP], const char *kind) { |
| 611 | char cache[APPLICATION_PATH_CAP] = {0}; |
| 612 | char directory[APPLICATION_PATH_CAP] = {0}; |
| 613 | int written; |
| 614 | if (application_cache_dir(cache)) { |
| 615 | written = snprintf(directory, sizeof(directory), "%s/logs", cache); |
| 616 | if (written <= 0 || written >= (int)sizeof(directory) || !cbm_mkdir_p(directory, 0700)) { |
| 617 | return false; |
| 618 | } |
| 619 | } else { |
| 620 | written = snprintf(directory, sizeof(directory), "%s", cbm_tmpdir()); |
| 621 | if (written <= 0 || written >= (int)sizeof(directory)) { |
| 622 | return false; |
| 623 | } |
| 624 | } |
| 625 | written = snprintf(out, APPLICATION_PATH_CAP, "%s/.daemon-index-%s-XXXXXX", directory, kind); |
| 626 | if (written <= 0 || written >= APPLICATION_PATH_CAP) { |
| 627 | out[0] = '\0'; |
| 628 | return false; |
| 629 | } |
| 630 | application_tmp_lock(); |
| 631 | int descriptor = cbm_mkstemp(out); |
| 632 | application_tmp_unlock(); |
| 633 | if (descriptor < 0) { |
| 634 | out[0] = '\0'; |
| 635 | return false; |
| 636 | } |
| 637 | (void)application_close(descriptor); |
| 638 | return true; |
| 639 | } |
| 640 | |
| 641 | static bool application_recovery_files_create(char marker_path[APPLICATION_PATH_CAP], |
| 642 | char quarantine_path[APPLICATION_PATH_CAP]) { |
no test coverage detected