The symlink case had never worked, and the file case was broken by the O_EXCL change because the error return changed from EISDIR to EEXIST. Fix both problems by just moving the test for an existing directory to a more logical place.
We should always have unlinked any old ones before, but this just makes sure that we never over-write any old file. A quick "grep" now shows that all the core tools that open files for writing use O_EXCL, ie we never overwrite an existing file in place.
IIRC our strategy was to let the users' umask take care of the final mode bits. This patch fixes places that deviate from it. Signed-off-by: Junio C Hamano <email@example.com> Signed-off-by: Linus Torvalds <firstname.lastname@example.org>
The merge stuff will want it soon, and we don't want to duplicate all the work..