42
42
#include "config.w32.h"
43
43
#include <windows.h>
44
44
#include <process.h>
45
+ #include "win32/codepage.h"
45
46
#else
46
47
#include "php_config.h"
47
48
extern char * * environ ;
@@ -109,8 +110,6 @@ extern char** environ;
109
110
static char windows_error_details [64 ];
110
111
static char ps_buffer [MAX_PATH ];
111
112
static const size_t ps_buffer_size = MAX_PATH ;
112
- typedef BOOL (WINAPI * MySetConsoleTitle )(LPCTSTR );
113
- typedef DWORD (WINAPI * MyGetConsoleTitle )(LPTSTR , DWORD );
114
113
#elif defined(PS_USE_CLOBBER_ARGV )
115
114
static char * ps_buffer ; /* will point to argv area */
116
115
static size_t ps_buffer_size ; /* space determined at run time */
@@ -371,22 +370,13 @@ int set_ps_title(const char* title)
371
370
372
371
#ifdef PS_USE_WIN32
373
372
{
374
- MySetConsoleTitle set_title = NULL ;
375
- HMODULE hMod = LoadLibrary ("kernel32.dll" );
373
+ wchar_t * ps_buffer_w = php_win32_cp_any_to_w (ps_buffer );
376
374
377
- if (!hMod ) {
375
+ if (!ps_buffer_w || ! SetConsoleTitleW ( ps_buffer_w ) ) {
378
376
return PS_TITLE_WINDOWS_ERROR ;
379
377
}
380
378
381
- /* NOTE we don't use _UNICODE*/
382
- set_title = (MySetConsoleTitle )GetProcAddress (hMod , "SetConsoleTitleA" );
383
- if (!set_title ) {
384
- return PS_TITLE_WINDOWS_ERROR ;
385
- }
386
-
387
- if (!set_title (ps_buffer )) {
388
- return PS_TITLE_WINDOWS_ERROR ;
389
- }
379
+ free (ps_buffer_w );
390
380
}
391
381
#endif /* PS_USE_WIN32 */
392
382
@@ -407,22 +397,23 @@ int get_ps_title(int *displen, const char** string)
407
397
408
398
#ifdef PS_USE_WIN32
409
399
{
410
- MyGetConsoleTitle get_title = NULL ;
411
- HMODULE hMod = LoadLibrary ( "kernel32.dll" ) ;
400
+ wchar_t ps_buffer_w [ MAX_PATH ] ;
401
+ char * tmp ;
412
402
413
- if (!hMod ) {
403
+ if (!( ps_buffer_cur_len = GetConsoleTitleW ( ps_buffer_w , ( DWORD ) sizeof ( ps_buffer_w ))) ) {
414
404
return PS_TITLE_WINDOWS_ERROR ;
415
405
}
416
406
417
- /* NOTE we don't use _UNICODE*/
418
- get_title = (MyGetConsoleTitle )GetProcAddress (hMod , "GetConsoleTitleA" );
419
- if (!get_title ) {
407
+ tmp = php_win32_cp_conv_w_to_any (ps_buffer_w , PHP_WIN32_CP_IGNORE_LEN , & ps_buffer_cur_len );
408
+ if (!tmp ) {
420
409
return PS_TITLE_WINDOWS_ERROR ;
421
410
}
422
411
423
- if (!(ps_buffer_cur_len = get_title (ps_buffer , (DWORD )ps_buffer_size ))) {
424
- return PS_TITLE_WINDOWS_ERROR ;
425
- }
412
+ ps_buffer_cur_len = ps_buffer_cur_len > sizeof (ps_buffer )- 1 ? sizeof (ps_buffer )- 1 : ps_buffer_cur_len ;
413
+
414
+ memmove (ps_buffer , tmp , ps_buffer_size );
415
+ ps_buffer [ps_buffer_cur_len ] = '\0' ;
416
+ free (tmp );
426
417
}
427
418
#endif
428
419
* displen = (int )ps_buffer_cur_len ;
0 commit comments