merge(third_party/git): Merge squashed git subtree at v2.23.0
Merge commit '1b593e1ea4
' as 'third_party/git'
This commit is contained in:
commit
7ef0d62730
3629 changed files with 1139935 additions and 0 deletions
37
third_party/git/compat/fopen.c
vendored
Normal file
37
third_party/git/compat/fopen.c
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* The order of the following two lines is important.
|
||||
*
|
||||
* SUPPRESS_FOPEN_REDEFINITION is defined before including git-compat-util.h
|
||||
* to avoid the redefinition of fopen within git-compat-util.h. This is
|
||||
* necessary since fopen is a macro on some platforms which may be set
|
||||
* based on compiler options. For example, on AIX fopen is set to fopen64
|
||||
* when _LARGE_FILES is defined. The previous technique of merely undefining
|
||||
* fopen after including git-compat-util.h is inadequate in this case.
|
||||
*/
|
||||
#define SUPPRESS_FOPEN_REDEFINITION
|
||||
#include "../git-compat-util.h"
|
||||
|
||||
FILE *git_fopen(const char *path, const char *mode)
|
||||
{
|
||||
FILE *fp;
|
||||
struct stat st;
|
||||
|
||||
if (mode[0] == 'w' || mode[0] == 'a')
|
||||
return fopen(path, mode);
|
||||
|
||||
if (!(fp = fopen(path, mode)))
|
||||
return NULL;
|
||||
|
||||
if (fstat(fileno(fp), &st)) {
|
||||
fclose(fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (S_ISDIR(st.st_mode)) {
|
||||
fclose(fp);
|
||||
errno = EISDIR;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return fp;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue