Hi, On Mon, 21 Dec 2015, Junio C Hamano wrote: > Jeff King <peff@xxxxxxxx> writes: > > > On Sun, Dec 20, 2015 at 05:31:48PM -0800, Junio C Hamano wrote: > > > >> we could do something like this, perhaps? > >> > >> FILE *fopen_forcibly(const char *path, const char *mode) > >> { > >> FILE *ret = fopen(path, mode); > >> > >> if (!ret && errno == EPERM) { > >> if (!unlink(path)) > >> ret = fopen(path, mode); > >> else > >> errno = EPERM; > >> } > >> return ret; > >> } > > > > Yeah, I think that is a much nicer solution for this case. It should > > work even in a shared repo, since we set the permissions for the > > surrounding $GIT_DIR appropriately[1]. > > > > I guess it would not apply to any files that do not want to truncate the > > existing contents. Probably it should drop the "mode" parameter at all, > > since anything but "w" would be crazy? > > Absolutely. Thanks for spotting. So maybe fcreate_or_truncate(const char *path) { FILE *ret = fopen(path, "w"); if (!ret && errno == EPERM) { if (!unlink(path)) ret = fopen(path, "w"); else errno = EPERM; } return ret; } ? Ciao, Dscho -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html