Thomas Glanzmann wrote:
static void create_directories(const char *path, const struct checkout *state)
{
...
if (mkdir(buf, 0777)) {
=> if (errno == EEXIST) {
struct stat st;
=> if (len > state->base_dir_len && state->force && !unlink(buf) && !mkdir(buf, 0777))
continue;
if (!stat(buf, &st) && S_ISDIR(st.st_mode))
continue; /* ok */
}
die("cannot create directory at %s", buf);
}
...
I think here is the problem. I don't understand what the code should do
actually. Or why the directory is deleted and re-created (maybe something todo
with permissions)?
It tries to remove a *file* that is in the way and create the directory
in its place. But since your unlink() behaves incorrectly (it is
supposed to *fail* for directories), the logic does not quite work as
expected - it mistakes the directory for a file.
Try swapping the two inner-most if-blocks.
-- Hannes