|
@@ -1,109 +0,0 @@
|
|
|
-From 86aeac96d04ae5381085c0f93acb12d3bfd06969 Mon Sep 17 00:00:00 2001
|
|
|
-From: Jeff King <peff@peff.net>
|
|
|
-Date: Wed, 30 Nov 2022 16:15:14 -0500
|
|
|
-Subject: [PATCH] git-compat-util: avoid redefining system function names
|
|
|
-MIME-Version: 1.0
|
|
|
-Content-Type: text/plain; charset=UTF-8
|
|
|
-Content-Transfer-Encoding: 8bit
|
|
|
-
|
|
|
-Our git-compat-util header defines a few noop wrappers for system
|
|
|
-functions if they are not available. This was originally done with a
|
|
|
-macro, but in 15b52a44e0 (compat-util: type-check parameters of no-op
|
|
|
-replacement functions, 2020-08-06) we switched to inline functions,
|
|
|
-because it gives us basic type-checking.
|
|
|
-
|
|
|
-This can cause compilation failures when the system _does_ declare those
|
|
|
-functions but we choose not to use them, since the compiler will
|
|
|
-complain about the redeclaration. This was seen in the real world when
|
|
|
-compiling against certain builds of uclibc, which may leave
|
|
|
-_POSIX_THREAD_SAFE_FUNCTIONS unset, but still declare flockfile() and
|
|
|
-funlockfile().
|
|
|
-
|
|
|
-It can also be seen on any platform that has setitimer() if you choose
|
|
|
-to compile without it (which plausibly could happen if the system
|
|
|
-implementation is buggy). E.g., on Linux:
|
|
|
-
|
|
|
- $ make NO_SETITIMER=IWouldPreferNotTo git.o
|
|
|
- CC git.o
|
|
|
- In file included from builtin.h:4,
|
|
|
- from git.c:1:
|
|
|
- git-compat-util.h:344:19: error: conflicting types for ‘setitimer’; have ‘int(int, const struct itimerval *, struct itimerval *)’
|
|
|
- 344 | static inline int setitimer(int which UNUSED,
|
|
|
- | ^~~~~~~~~
|
|
|
- In file included from git-compat-util.h:234:
|
|
|
- /usr/include/x86_64-linux-gnu/sys/time.h:155:12: note: previous declaration of ‘setitimer’ with type ‘int(__itimer_which_t, const struct itimerval * restrict, struct itimerval * restrict)’
|
|
|
- 155 | extern int setitimer (__itimer_which_t __which,
|
|
|
- | ^~~~~~~~~
|
|
|
- make: *** [Makefile:2714: git.o] Error 1
|
|
|
-
|
|
|
-Here I think the compiler is complaining about the lack of "restrict"
|
|
|
-annotations in our version, but even if we matched it completely (and
|
|
|
-there is no way to match all platforms anyway), it would still complain
|
|
|
-about a static declaration following a non-static one. Using macros
|
|
|
-doesn't have this problem, because the C preprocessor rewrites the name
|
|
|
-in our code before we hit this level of compilation.
|
|
|
-
|
|
|
-One way to fix this would just be to revert most of 15b52a44e0. What we
|
|
|
-really cared about there was catching build problems with
|
|
|
-precompose_argv(), which most platforms _don't_ build, and which is our
|
|
|
-custom function. So we could just switch the system wrappers back to
|
|
|
-macros; most people build the real versions anyway, and they don't
|
|
|
-change. So the extra type-checking isn't likely to catch bugs.
|
|
|
-
|
|
|
-But with a little work, we can have our cake and eat it, too. If we
|
|
|
-define the type-checking wrappers with a unique name, and then redirect
|
|
|
-the system names to them with macros, we still get our type checking,
|
|
|
-but without redeclaring the system function names.
|
|
|
-
|
|
|
-Signed-off-by: Jeff King <peff@peff.net>
|
|
|
-Signed-off-by: Junio C Hamano <gitster@pobox.com>
|
|
|
-[Bagas: cherry-picked from e0c08a4f738b3dea7a4e8fe3511c323cf1f41942 on next branch]
|
|
|
-Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
|
|
|
----
|
|
|
- git-compat-util.h | 13 ++++++++-----
|
|
|
- 1 file changed, 8 insertions(+), 5 deletions(-)
|
|
|
-
|
|
|
-diff --git a/git-compat-util.h b/git-compat-util.h
|
|
|
-index af05077560..f6882b9b50 100644
|
|
|
---- a/git-compat-util.h
|
|
|
-+++ b/git-compat-util.h
|
|
|
-@@ -341,11 +341,12 @@ struct itimerval {
|
|
|
- #endif
|
|
|
-
|
|
|
- #ifdef NO_SETITIMER
|
|
|
--static inline int setitimer(int which UNUSED,
|
|
|
-- const struct itimerval *value UNUSED,
|
|
|
-- struct itimerval *newvalue UNUSED) {
|
|
|
-+static inline int git_setitimer(int which,
|
|
|
-+ const struct itimerval *value,
|
|
|
-+ struct itimerval *newvalue) {
|
|
|
- return 0; /* pretend success */
|
|
|
- }
|
|
|
-+#define setitimer(which,value,ovalue) git_setitimer(which,value,ovalue)
|
|
|
- #endif
|
|
|
-
|
|
|
- #ifndef NO_LIBGEN_H
|
|
|
-@@ -1479,14 +1480,16 @@ int open_nofollow(const char *path, int flags);
|
|
|
- #endif
|
|
|
-
|
|
|
- #ifndef _POSIX_THREAD_SAFE_FUNCTIONS
|
|
|
--static inline void flockfile(FILE *fh UNUSED)
|
|
|
-+static inline void git_flockfile(FILE *fh)
|
|
|
- {
|
|
|
- ; /* nothing */
|
|
|
- }
|
|
|
--static inline void funlockfile(FILE *fh UNUSED)
|
|
|
-+static inline void git_funlockfile(FILE *fh)
|
|
|
- {
|
|
|
- ; /* nothing */
|
|
|
- }
|
|
|
-+#define flockfile(fh) git_flockfile(fh)
|
|
|
-+#define funlockfile(fh) git_funlockfile(fh)
|
|
|
- #define getc_unlocked(fh) getc(fh)
|
|
|
- #endif
|
|
|
-
|
|
|
-
|
|
|
-base-commit: cbf04937d5b9fcf0a76c28f69e6294e9e3ecd7e6
|
|
|
---
|
|
|
-An old man doll... just what I always wanted! - Clara
|
|
|
-
|