diff options
| author | Anatol Belski <ab@php.net> | 2015-03-18 20:50:54 +0100 |
|---|---|---|
| committer | Anatol Belski <ab@php.net> | 2015-03-18 20:50:54 +0100 |
| commit | eb5dfedb6b4742640fc447d5a03dc575d5f569f1 (patch) | |
| tree | 8f91903b358af2cf122cb9bd5d89914992e3c18b /sapi/cli | |
| parent | d092cb6e8ec9afc9c0433fcc42df57d3aa621f02 (diff) | |
| download | php-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.c | 38 |
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; |
