1515 #define _PATH_LOCALBASE "/usr/local"
1616#elif __NetBSD__
1717 #define _PATH_LOCALBASE "/usr/pkg"
18- #endif
19-
20- #ifdef _WIN32
21-
22- #include "util/mallocHelper.h"
18+ #elif _WIN32
2319
24- #include <winver.h>
20+ #include "util/windows/version.h"
21+ #include <windows.h>
2522
26- static bool getFileVersion (const char * exePath , FFstrbuf * version )
23+ static bool getFileVersion (const FFstrbuf * exePath , FFstrbuf * version )
2724{
28- DWORD handle ;
29- DWORD size = GetFileVersionInfoSizeA (exePath , & handle );
30- if (size > 0 )
31- {
32- FF_AUTO_FREE void * versionData = malloc (size );
33- if (GetFileVersionInfoA (exePath , handle , size , versionData ))
34- {
35- VS_FIXEDFILEINFO * verInfo ;
36- UINT len ;
37- if (VerQueryValueW (versionData , L"\\" , (void * * )& verInfo , & len ) && len && verInfo -> dwSignature == 0xFEEF04BD )
38- {
39- ffStrbufAppendF (version , "%u.%u.%u.%u" ,
40- (unsigned )(( verInfo -> dwFileVersionMS >> 16 ) & 0xffff ),
41- (unsigned )(( verInfo -> dwFileVersionMS >> 0 ) & 0xffff ),
42- (unsigned )(( verInfo -> dwFileVersionLS >> 16 ) & 0xffff ),
43- (unsigned )(( verInfo -> dwFileVersionLS >> 0 ) & 0xffff )
44- );
45- return true;
46- }
47- }
48- }
49-
50- return false;
25+ wchar_t exePathW [PATH_MAX ];
26+ int len = MultiByteToWideChar (CP_UTF8 , 0 , exePath -> chars , (int )exePath -> length , exePathW , ARRAY_SIZE (exePathW ));
27+ if (len <= 0 ) return false;
28+ return ffGetFileVersion (exePathW , version );
5129}
52-
5330#endif
5431
5532static bool getExeVersionRaw (FFstrbuf * exe , FFstrbuf * version )
@@ -119,7 +96,7 @@ static bool getShellVersionPwsh(FFstrbuf* exe, FFstrbuf* version)
11996 }
12097
12198 #ifdef _WIN32
122- if (getFileVersion (exe -> chars , version ))
99+ if (getFileVersion (exe , version ))
123100 {
124101 ffStrbufSubstrBeforeLastC (version , '.' );
125102 return true;
@@ -312,7 +289,7 @@ bool fftsGetShellVersion(FFstrbuf* exe, const char* exeName, FFstrbuf* exePath,
312289 if (ffStrEqualsIgnCase (exeName , "powershell" ) || ffStrEqualsIgnCase (exeName , "powershell_ise" ))
313290 return getShellVersionWinPowerShell (exe , version );
314291
315- return getFileVersion (exe -> chars , version );
292+ return getFileVersion (exe , version );
316293 #endif
317294
318295 return false;
@@ -706,7 +683,7 @@ static bool getTerminalVersionWindowsTerminal(FFstrbuf* exe, FFstrbuf* version)
706683 return true;
707684 }
708685
709- return getFileVersion (exe -> chars , version );
686+ return getFileVersion (exe , version );
710687}
711688
712689static bool getTerminalVersionConEmu (FFstrbuf * exe , FFstrbuf * version )
@@ -716,7 +693,7 @@ static bool getTerminalVersionConEmu(FFstrbuf* exe, FFstrbuf* version)
716693 if (version -> length )
717694 return true;
718695
719- return getFileVersion (exe -> chars , version );
696+ return getFileVersion (exe , version );
720697}
721698
722699#endif
@@ -875,7 +852,7 @@ bool fftsGetTerminalVersion(FFstrbuf* processName, FF_MAYBE_UNUSED FFstrbuf* exe
875852
876853 #ifdef _WIN32
877854
878- return getFileVersion (exe -> chars , version );
855+ return getFileVersion (exe , version );
879856
880857 #else
881858
0 commit comments