| 765 | } root_status_t; |
| 766 | |
| 767 | static root_status_t root_status(const char *root_path, int *out_errno) { |
| 768 | *out_errno = 0; |
| 769 | if (!root_path) { |
| 770 | return ROOT_UNCERTAIN; |
| 771 | } |
| 772 | struct stat st; |
| 773 | if (stat(root_path, &st) == 0) { |
| 774 | /* Exists but is no longer a directory → the root directory is gone. */ |
| 775 | return S_ISDIR(st.st_mode) ? ROOT_PRESENT : ROOT_MISSING; |
| 776 | } |
| 777 | *out_errno = errno; |
| 778 | return cbm_watcher_root_missing_errno(errno) ? ROOT_MISSING : ROOT_UNCERTAIN; |
| 779 | } |
| 780 | |
| 781 | /* Sustained-absence window (seconds) before a missing root may be pruned. |
| 782 | * Generous default: 10 minutes. Override with CBM_WATCHER_PRUNE_GRACE_S |
no test coverage detected