Merge branch 'nd/fopen-errors'
We often try to open a file for reading whose existence is optional, and silently ignore errors from open/fopen; report such errors if they are not due to missing files. * nd/fopen-errors: mingw_fopen: report ENOENT for invalid file names mingw: verify that paths are not mistaken for remote nicknames log: fix memory leak in open_next_file() rerere.c: move error_errno() closer to the source system call print errno when reporting a system call error wrapper.c: make warn_on_inaccessible() static wrapper.c: add and use fopen_or_warn() wrapper.c: add and use warn_on_fopen_errors() config.mak.uname: set FREAD_READS_DIRECTORIES for Darwin, too config.mak.uname: set FREAD_READS_DIRECTORIES for Linux and FreeBSD clone: use xfopen() instead of fopen() use xfopen() in more places git_fopen: fix a sparse 'not declared' warning
This commit is contained in:
31
wrapper.c
31
wrapper.c
@ -418,6 +418,32 @@ FILE *fopen_for_writing(const char *path)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void warn_on_inaccessible(const char *path)
|
||||
{
|
||||
warning_errno(_("unable to access '%s'"), path);
|
||||
}
|
||||
|
||||
int warn_on_fopen_errors(const char *path)
|
||||
{
|
||||
if (errno != ENOENT && errno != ENOTDIR) {
|
||||
warn_on_inaccessible(path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fopen_or_warn(const char *path, const char *mode)
|
||||
{
|
||||
FILE *fp = fopen(path, mode);
|
||||
|
||||
if (fp)
|
||||
return fp;
|
||||
|
||||
warn_on_fopen_errors(path);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int xmkstemp(char *template)
|
||||
{
|
||||
int fd;
|
||||
@ -576,11 +602,6 @@ int remove_or_warn(unsigned int mode, const char *file)
|
||||
return S_ISGITLINK(mode) ? rmdir_or_warn(file) : unlink_or_warn(file);
|
||||
}
|
||||
|
||||
void warn_on_inaccessible(const char *path)
|
||||
{
|
||||
warning_errno(_("unable to access '%s'"), path);
|
||||
}
|
||||
|
||||
static int access_error_is_ok(int err, unsigned flag)
|
||||
{
|
||||
return (is_missing_file_error(err) ||
|
||||
|
Reference in New Issue
Block a user