commit c65fcef2fb5ed060705587a71de3fc3eff245082 from: Stefan Sperling date: Sun Jan 13 13:07:17 2019 UTC fix leaks in add_dir_on_disk(), and ensure all parents get created commit - 21908da4c3cfc3f2d04dd511bd59c1c877f92b14 commit + c65fcef2fb5ed060705587a71de3fc3eff245082 blob - 62fe285a54aaefa790d4d2c759df4e4733ec5fd0 blob + b0d9794ebfc49ab71d20e5bfc73ea9811d5d1bf0 --- lib/worktree.c +++ lib/worktree.c @@ -520,11 +520,13 @@ make_parent_dirs(const char *abspath) err = make_parent_dirs(parent); if (err) return err; + if (mkdir(parent, GOT_DEFAULT_DIR_MODE) == -1) + return got_error_from_errno(); } else - return got_error_from_errno(); + err = got_error_from_errno(); } - return NULL; + return err; } static const struct got_error * @@ -548,22 +550,19 @@ add_dir_on_disk(struct got_worktree *worktree, const c if (!S_ISDIR(sb.st_mode)) { /* TODO directory is obstructed; do something */ - return got_error(GOT_ERR_FILE_OBSTRUCTED); + err = got_error(GOT_ERR_FILE_OBSTRUCTED); + goto done; } return NULL; - } - - if (errno == ENOENT) { + } else if (errno == ENOENT) { err = make_parent_dirs(abspath); if (err) - return err; - if (mkdir(abspath, GOT_DEFAULT_DIR_MODE) == 0) - return NULL; - } else { + goto done; + if (mkdir(abspath, GOT_DEFAULT_DIR_MODE) == -1) + err = got_error_from_errno(); + } else err = got_error_from_errno(); - goto done; - } } done: