summaryrefslogtreecommitdiff
path: root/sapi/cli
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2015-03-18 20:50:54 +0100
committerAnatol Belski <ab@php.net>2015-03-18 20:50:54 +0100
commiteb5dfedb6b4742640fc447d5a03dc575d5f569f1 (patch)
tree8f91903b358af2cf122cb9bd5d89914992e3c18b /sapi/cli
parentd092cb6e8ec9afc9c0433fcc42df57d3aa621f02 (diff)
downloadphp-git-eb5dfedb6b4742640fc447d5a03dc575d5f569f1.tar.gz
don't expect set/get title symbols are always there
Diffstat (limited to 'sapi/cli')
-rw-r--r--sapi/cli/ps_title.c38
1 files changed, 35 insertions, 3 deletions
diff --git a/sapi/cli/ps_title.c b/sapi/cli/ps_title.c
index 9685666b1b..2d95e494aa 100644
--- a/sapi/cli/ps_title.c
+++ b/sapi/cli/ps_title.c
@@ -109,6 +109,8 @@ extern char** environ;
static char windows_error_details[64];
static char ps_buffer[MAX_PATH];
static const size_t ps_buffer_size = MAX_PATH;
+typedef BOOL (WINAPI *MySetConsoleTitle)(LPCTSTR);
+typedef DWORD (WINAPI *MyGetConsoleTitle)(LPTSTR, DWORD);
#elif defined(PS_USE_CLOBBER_ARGV)
static char *ps_buffer; /* will point to argv area */
static size_t ps_buffer_size; /* space determined at run time */
@@ -367,8 +369,22 @@ int set_ps_title(const char* title)
#ifdef PS_USE_WIN32
{
- if (!SetConsoleTitle(ps_buffer))
+ MySetConsoleTitle set_title = NULL;
+ HMODULE hMod = LoadLibrary("kernel32.dll");
+
+ if (!hMod) {
+ return PS_TITLE_WINDOWS_ERROR;
+ }
+
+ /* NOTE we don't use _UNICODE*/
+ set_title = (MySetConsoleTitle)GetProcAddress(hMod, "SetConsoleTitleA");
+ if (!set_title) {
return PS_TITLE_WINDOWS_ERROR;
+ }
+
+ if (!set_title(ps_buffer)) {
+ return PS_TITLE_WINDOWS_ERROR;
+ }
}
#endif /* PS_USE_WIN32 */
@@ -388,8 +404,24 @@ int get_ps_title(int *displen, const char** string)
return rc;
#ifdef PS_USE_WIN32
- if (!(ps_buffer_cur_len = GetConsoleTitle(ps_buffer, (DWORD)ps_buffer_size)))
- return PS_TITLE_WINDOWS_ERROR;
+ {
+ MyGetConsoleTitle get_title = NULL;
+ HMODULE hMod = LoadLibrary("kernel32.dll");
+
+ if (!hMod) {
+ return PS_TITLE_WINDOWS_ERROR;
+ }
+
+ /* NOTE we don't use _UNICODE*/
+ get_title = (MyGetConsoleTitle)GetProcAddress(hMod, "GetConsoleTitleA");
+ if (!get_title) {
+ return PS_TITLE_WINDOWS_ERROR;
+ }
+
+ if (!(ps_buffer_cur_len = get_title(ps_buffer, (DWORD)ps_buffer_size))) {
+ return PS_TITLE_WINDOWS_ERROR;
+ }
+ }
#endif
*displen = (int)ps_buffer_cur_len;
*string = ps_buffer;