/* * Copyright (c) 2026, Chloe Moffett * Provided under the BSD-3 clause */ #include #include #include #include #include #include #include "libremail/file.h" int try_mkdir(const char *path, mode_t mode) { if (path == NULL) { errno = EINVAL; return -1; } if (access(path, F_OK) != 0) { return mkdir(path, mode); } return 0; } int try_touch(const char *path, mode_t mode, void *buf, size_t len) { ssize_t retlen; int fd; if (path == NULL) { errno = EINVAL; return -1; } fd = open(path, O_RDONLY | O_CREAT, mode); if (fd < 0) { perror("open"); return -1; } /* Write the initial contents if we can */ if (buf != NULL) { retlen = write(fd, buf, len); if (retlen <= 0) { close(fd); perror("write"); return -1; } } close(fd); return 0; }