[PATCH] exec_cmd: RUNTIME_PREFIX on z/OS systems
From: Haritha via GitGitGadget <hidden>
Date: 2024-08-22 13:52:16
Subsystem:
kernel build + files below scripts/ (unless maintained elsewhere), the rest · Maintainers:
Nathan Chancellor, Nicolas Schier, Linus Torvalds
From: D Harithamma <redacted>
Enable Git to resolve its own binary location using __getprogramdir
and getprogname.
Since /proc is not a mandatory filesystem on z/OS, we cannot rely on the
git_get_exec_path_procfs method to determine Git's executable path. To
address this, we have implemented git_get_exec_path_zos, which resolves
the executable path by extracting it from the current program's
directory and filename.
Signed-off-by: D Harithamma <redacted>
---
exec_cmd: RUNTIME_PREFIX on z/OS systems
Enable Git to resolve its own binary location using __getprogramdir and
getprogname.
Since /proc is not a mandatory filesystem on z/OS, we cannot rely on the
git_get_exec_path_procfs method to determine Git's executable path. To
address this, we have implemented git_get_exec_path_zos, which resolves
the executable path by extracting it from the current program's
directory and filename.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1769%2FHarithaIBM%2FexecmdFix-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1769/HarithaIBM/execmdFix-v1
Pull-Request: https://github.com/git/git/pull/1769
Makefile | 8 ++++++++
config.mak.uname | 1 +
exec-cmd.c | 23 +++++++++++++++++++++++
3 files changed, 32 insertions(+)
diff --git a/Makefile b/Makefile
index a87e18b317d..bdc68234823 100644
--- a/Makefile
+++ b/Makefile@@ -385,6 +385,10 @@ include shared.mak # supports calling _NSGetExecutablePath to retrieve the path of the running # executable. # +# When using RUNTIME_PREFIX, define HAVE_ZOS_GET_EXECUTABLE_PATH if your platform +# supports calling __getprogramdir and getprogname to retrieve the path of the +# running executable. +# # When using RUNTIME_PREFIX, define HAVE_WPGMPTR if your platform offers # the global variable _wpgmptr containing the absolute path of the current # executable (this is the case on Windows).
@@ -2155,6 +2159,10 @@ ifdef HAVE_NS_GET_EXECUTABLE_PATH BASIC_CFLAGS += -DHAVE_NS_GET_EXECUTABLE_PATH endif +ifdef HAVE_ZOS_GET_EXECUTABLE_PATH + BASIC_CFLAGS += -DHAVE_ZOS_GET_EXECUTABLE_PATH +endif + ifdef HAVE_WPGMPTR BASIC_CFLAGS += -DHAVE_WPGMPTR endif
diff --git a/config.mak.uname b/config.mak.uname
index aa0fd26bd53..904bcf35987 100644
--- a/config.mak.uname
+++ b/config.mak.uname@@ -648,6 +648,7 @@ ifeq ($(uname_S),OS/390) NO_GECOS_IN_PWENT = YesPlease HAVE_STRINGS_H = YesPlease NEEDS_MODE_TRANSLATION = YesPlease + HAVE_ZOS_GET_EXECUTABLE_PATH = YesPlease endif ifeq ($(uname_S),MINGW) ifeq ($(shell expr "$(uname_R)" : '1\.'),2)
diff --git a/exec-cmd.c b/exec-cmd.c
index 909777f61f4..507e67d528b 100644
--- a/exec-cmd.c
+++ b/exec-cmd.c@@ -150,6 +150,25 @@ static int git_get_exec_path_darwin(struct strbuf *buf) } #endif /* HAVE_NS_GET_EXECUTABLE_PATH */ +#ifdef HAVE_ZOS_GET_EXECUTABLE_PATH +/* + * Resolves the executable path from current program's directory and name. + * + * Returns 0 on success, -1 on failure. + */ +static int git_get_exec_path_zos(struct strbuf *buf) +{ + char *dir = __getprogramdir(); + char *exe = getprogname(); + if (dir && exe) { + strbuf_addf(buf, "%s/%s", dir, exe); + return 0; + } + return -1; +} + +#endif /* HAVE_ZOS_GET_EXECUTABLE_PATH */ + #ifdef HAVE_WPGMPTR /* * Resolves the executable path by using the global variable _wpgmptr.
@@ -206,6 +225,10 @@ static int git_get_exec_path(struct strbuf *buf, const char *argv0) git_get_exec_path_wpgmptr(buf) && #endif /* HAVE_WPGMPTR */ +#ifdef HAVE_ZOS_GET_EXECUTABLE_PATH + git_get_exec_path_zos(buf) && +#endif /*HAVE_ZOS_GET_EXECUTABLE_PATH */ + git_get_exec_path_from_argv0(buf, argv0)) { return -1; }
base-commit: 3a7362eb9fad0c4838f5cfaa95ed3c51a4c18d93 -- gitgitgadget