if ((dirperm & 0060) != 0) dirperm |= 0010;
if ((dirperm & 0006) != 0) dirperm |= 0001;
- if (rad_mkdir(dir, dirperm, -1, -1) < 0) {
+ if (fr_mkdir(NULL, dir, -1, dirperm) < 0) {
fr_strerror_printf("Failed to create directory %s: %s", dir, fr_syserror(errno));
talloc_free(dir);
return -1;
p = strrchr(exp, FR_DIR_SEP);
if (p) {
*p = '\0';
- if (rad_mkdir(exp, S_IRWXU, -1, -1) < 0) {
+ if (fr_mkdir(NULL, exp, -1, S_IRWXU) < 0) {
ERROR("Failed creating %s: %s", exp, fr_syserror(errno));
talloc_free(exp);
return;
* - <= 0 on failure. Negative offset pointing to the
* path separator of the path component that caused the error.
*/
-ssize_t fr_mkdir(int *fd_out, char const *path, size_t len, mode_t mode)
+ssize_t fr_mkdir(int *fd_out, char const *path, ssize_t len, mode_t mode)
{
char *our_path;
int fd = -1;
ssize_t slen;
+ if (len < 0) len = strlen(path);
+ if (len == 0) return 0;
+
/*
* Fast path (har har)
*
* Dup the amount of input path
* we need.
*/
- our_path = talloc_bstrndup(NULL, path, len);
+ our_path = talloc_bstrndup(NULL, path, (size_t)len);
if (!our_path) {
fr_strerror_printf("Out of memory");
return -1;
void fr_quick_sort(void const *to_sort[], int min_idx, int max_idx, fr_cmp_t cmp);
int fr_digest_cmp(uint8_t const *a, uint8_t const *b, size_t length) CC_HINT(nonnull);
-ssize_t fr_mkdir(int *fd_out, char const *path, size_t len, mode_t mode);
+ssize_t fr_mkdir(int *fd_out, char const *path, ssize_t len, mode_t mode);
ssize_t fr_file_touch(int *fd_out, char const *filename, mode_t mode, bool mkdir, mode_t dir_mode);
p = strrchr(path, '/');
if (p) {
*p = '\0';
- if (rad_mkdir(path, 0700, -1, -1) < 0) {
+ if (fr_mkdir(NULL, path, -1, 0700) < 0) {
RERROR("Failed to create directory %s: %s", path, fr_syserror(errno));
rcode = RLM_MODULE_FAIL;
goto finish;
MEM(buff = talloc_typed_strdup(cs, inst->filename));
}
- ret = rad_mkdir(buff, 0700, -1, -1);
+ ret = fr_mkdir(NULL, buff, -1, 0700);
talloc_free(buff);
if (ret < 0) {
ERROR("Failed creating directory for SQLite database: %s", fr_syserror(errno));