| 882 | } root_status_t; |
| 883 | |
| 884 | static root_status_t root_status(const char *root_path, int *out_errno) { |
| 885 | *out_errno = 0; |
| 886 | if (!root_path) { |
| 887 | return ROOT_UNCERTAIN; |
| 888 | } |
| 889 | struct stat st; |
| 890 | if (stat(root_path, &st) == 0) { |
| 891 | /* Exists but is no longer a directory → the root directory is gone. */ |
| 892 | return S_ISDIR(st.st_mode) ? ROOT_PRESENT : ROOT_MISSING; |
| 893 | } |
| 894 | *out_errno = errno; |
| 895 | return cbm_watcher_root_missing_errno(errno) ? ROOT_MISSING : ROOT_UNCERTAIN; |
| 896 | } |
| 897 | |
| 898 | /* Sustained-absence window (seconds) before a missing root may be pruned. |
| 899 | * Generous default: 10 minutes. Override with CBM_WATCHER_PRUNE_GRACE_S |
no test coverage detected