Browse Source
Some systems do not fail as expected when fread et al. are called on a directory stream. Replace fopen on such systems which will fail when the supplied path is a directory. Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint


3 changed files with 38 additions and 0 deletions
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
#include "../git-compat-util.h" |
||||
#undef fopen |
||||
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…
Reference in new issue