Issue 30749: Non-atomic and unusual (wrong) rename behavior under OS X (original) (raw)

Attached file causes a failed rename, which is fine. However, after the failed rename, the directory structure has changed (and the error reported is not very helpful). Behavior does not match Linux or Windows behavior.

Discovered using random testing to check pyfakefs for conformance with os module, using TSTL tool.

#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/stat.h>

int main () { system("rm -rf testingdir"); mkdir("testingdir",S_IRWXU);
mkdir("testingdir/a",S_IRWXU); mkdir("testingdir/a/a",S_IRWXU); mkdir("testingdir/a/a/a",S_IRWXU); printf("BEFORE:\n"); system("ls -lR testingdir"); int res = rename("testingdir","testingdir/a/a/a"); printf("res = %d, ERRNO = %d\n",res,errno); printf("AFTER:\n"); system("ls -lR testingdir");
}

shows that it appears to be an OS X rename issue, not a Python problem.

Lowering # directories in the chain by 1 reverts to errno 22 and correct behavior, but it's at the OS level, not Python.