提交 b0a642ac 编写于 作者: R Ramsay Jones 提交者: Junio C Hamano

git_fopen: fix a sparse 'not declared' warning

If git is built with the FREAD_READS_DIRECTORIES build variable set, this
would cause sparse to issue a 'not declared, should it be static?' warning
on Linux. This is a result of the method employed by 'compat/fopen.c' to
suppress the (possible) redefinition of the (system) fopen macro, which
also removes the extern declaration of the git_fopen function.

In order to suppress the warning, introduce a new macro to suppress the
definition (or possibly the re-definition) of the fopen symbol as a macro
override. This new macro (SUPPRESS_FOPEN_REDEFINITION) is only defined in
'compat/fopen.c', just prior to the inclusion of the 'git-compat-util.h'
header file.
Signed-off-by: NRamsay Jones <ramsay@ramsayjones.plus.com>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 d2bbb7c2
/* /*
* The order of the following two lines is important. * The order of the following two lines is important.
* *
* FREAD_READS_DIRECTORIES is undefined before including git-compat-util.h * SUPPRESS_FOPEN_REDEFINITION is defined before including git-compat-util.h
* to avoid the redefinition of fopen within git-compat-util.h. This is * 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 * 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 * based on compiler options. For example, on AIX fopen is set to fopen64
* when _LARGE_FILES is defined. The previous technique of merely undefining * when _LARGE_FILES is defined. The previous technique of merely undefining
* fopen after including git-compat-util.h is inadequate in this case. * fopen after including git-compat-util.h is inadequate in this case.
*/ */
#undef FREAD_READS_DIRECTORIES #define SUPPRESS_FOPEN_REDEFINITION
#include "../git-compat-util.h" #include "../git-compat-util.h"
FILE *git_fopen(const char *path, const char *mode) FILE *git_fopen(const char *path, const char *mode)
......
...@@ -689,10 +689,12 @@ char *gitstrdup(const char *s); ...@@ -689,10 +689,12 @@ char *gitstrdup(const char *s);
#endif #endif
#ifdef FREAD_READS_DIRECTORIES #ifdef FREAD_READS_DIRECTORIES
#ifdef fopen # if !defined(SUPPRESS_FOPEN_REDEFINITION)
#undef fopen # ifdef fopen
#endif # undef fopen
#define fopen(a,b) git_fopen(a,b) # endif
# define fopen(a,b) git_fopen(a,b)
# endif
extern FILE *git_fopen(const char*, const char*); extern FILE *git_fopen(const char*, const char*);
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册