Skip to content

Commit

Permalink
exec_cmd: provide a new-style RUNTIME_PREFIX helper for Windows
Browse files Browse the repository at this point in the history
The RUNTIME_PREFIX feature comes from Git for Windows, but it was
enhanced to allow support for other platforms. While changing the
original idea, the concept was also improved by not forcing argv[0] to
be adjusted.

Let's allow the same for Windows by implementing a helper just as for
the other platforms.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
  • Loading branch information
dscho committed Mar 26, 2018
1 parent d621419 commit eb98096
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
8 changes: 8 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,10 @@ all::
# When using RUNTIME_PREFIX, define HAVE_NS_GET_EXECUTABLE_PATH if your platform
# supports calling _NSGetExecutablePath 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).

GIT-VERSION-FILE: FORCE
@$(SHELL_PATH) ./GIT-VERSION-GEN
Expand Down Expand Up @@ -1693,6 +1697,10 @@ ifdef HAVE_NS_GET_EXECUTABLE_PATH
BASIC_CFLAGS += -DHAVE_NS_GET_EXECUTABLE_PATH
endif

ifdef HAVE_WPGMPTR
BASIC_CFLAGS += -DHAVE_WPGMPTR
endif

ifeq ($(TCLTK_PATH),)
NO_TCLTK = NoThanks
endif
Expand Down
22 changes: 22 additions & 0 deletions exec_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,24 @@ static int git_get_exec_path_darwin(struct strbuf *buf)
}
#endif /* HAVE_NS_GET_EXECUTABLE_PATH */

#ifdef HAVE_WPGMPTR
/*
* Resolves the executable path by using the global variable _wpgmptr.
*
* Returns 0 on success, -1 on failure.
*/
static int git_get_exec_path_wpgmptr(struct strbuf *buf)
{
int len = wcslen(_wpgmptr) * 3 + 1;
strbuf_grow(buf, len);
len = xwcstoutf(buf->buf, _wpgmptr, len);
if (len < 0)
return -1;
buf->len += len;
return 0;
}
#endif /* HAVE_WPGMPTR */

/*
* Resolves the absolute path of the current executable.
*
Expand Down Expand Up @@ -178,6 +196,10 @@ static int git_get_exec_path(struct strbuf *buf, const char *argv0)
git_get_exec_path_procfs(buf) &&
#endif /* PROCFS_EXECUTABLE_PATH */

#ifdef HAVE_WPGMPTR
git_get_exec_path_wpgmptr(buf) &&
#endif /* HAVE_WPGMPTR */

git_get_exec_path_from_argv0(buf, argv0)) {
return -1;
}
Expand Down

0 comments on commit eb98096

Please sign in to comment.