| 185 | } |
| 186 | |
| 187 | bool WriteFully(int fd, const void* data, size_t byte_count) { |
| 188 | const uint8_t* p = reinterpret_cast<const uint8_t*>(data); |
| 189 | size_t remaining = byte_count; |
| 190 | while (remaining > 0) { |
| 191 | ssize_t n = TEMP_FAILURE_RETRY(write(fd, p, remaining)); |
| 192 | if (n == -1) return false; |
| 193 | p += n; |
| 194 | remaining -= n; |
| 195 | } |
| 196 | return true; |
| 197 | } |
| 198 | |
| 199 | bool RemoveFileIfExists(const std::string& path, std::string* err) { |
| 200 | struct stat st; |