@@ -64,15 +64,12 @@ static bool extractBashVersion(const char* line, FF_MAYBE_UNUSED uint32_t len, v
6464 return false;
6565}
6666
67- static bool getShellVersionBash (FFstrbuf * exe , FFstrbuf * exePath , FFstrbuf * version )
67+ static bool getShellVersionBash (FFstrbuf * exePath , FFstrbuf * version )
6868{
69- const char * path = exePath -> chars ;
70- if (* path == '\0' )
71- path = exe -> chars ;
72- ffBinaryExtractStrings (path , extractBashVersion , version , (uint32_t ) strlen ("@(#)Bash version 0.0.0(0) release GNU" ));
69+ ffBinaryExtractStrings (exePath -> chars , extractBashVersion , version , (uint32_t ) strlen ("@(#)Bash version 0.0.0(0) release GNU" ));
7370 if (version -> length > 0 ) return true;
7471
75- if (!getExeVersionRaw (exe , version ))
72+ if (!getExeVersionRaw (exePath , version ))
7673 return false;
7774
7875 // GNU bash, version 5.1.16(1)-release (x86_64-pc-msys)\nCopyright...
@@ -230,16 +227,12 @@ static bool extractZshVersion(const char* line, FF_MAYBE_UNUSED uint32_t len, vo
230227 return false;
231228}
232229
233- static bool getShellVersionZsh (FFstrbuf * exe , FFstrbuf * exePath , FFstrbuf * version )
230+ static bool getShellVersionZsh (FFstrbuf * exePath , FFstrbuf * version )
234231{
235- const char * path = exePath -> chars ;
236- if (* path == '\0' )
237- path = exe -> chars ;
238-
239- ffBinaryExtractStrings (path , extractZshVersion , version , (uint32_t ) strlen ("zsh-0.0-0" ));
232+ ffBinaryExtractStrings (exePath -> chars , extractZshVersion , version , (uint32_t ) strlen ("zsh-0.0-0" ));
240233 if (version -> length ) return true;
241234
242- return getExeVersionGeneral (exe , version ); //zsh 5.9 (arm-apple-darwin21.3.0)
235+ return getExeVersionGeneral (exePath , version ); //zsh 5.9 (arm-apple-darwin21.3.0)
243236}
244237
245238#ifdef _WIN32
@@ -270,38 +263,41 @@ bool fftsGetShellVersion(FFstrbuf* exe, const char* exeName, FFstrbuf* exePath,
270263 if (ffStrEqualsIgnCase (exeName , "sh" )) // #849
271264 return false;
272265
266+ if (exePath -> length == 0 )
267+ exePath = exe ;
268+
273269 if (ffStrEqualsIgnCase (exeName , "bash" ))
274- return getShellVersionBash (exe , exePath , version );
270+ return getShellVersionBash (exePath , version );
275271 if (ffStrEqualsIgnCase (exeName , "zsh" ))
276- return getShellVersionZsh (exe , exePath , version );
272+ return getShellVersionZsh (exePath , version );
277273 if (ffStrEqualsIgnCase (exeName , "fish" ))
278- return getShellVersionFish (exe , version );
274+ return getShellVersionFish (exePath , version );
279275 if (ffStrEqualsIgnCase (exeName , "pwsh" ))
280- return getShellVersionPwsh (exe , version );
276+ return getShellVersionPwsh (exePath , version );
281277 if (ffStrEqualsIgnCase (exeName , "csh" ) || ffStrEqualsIgnCase (exeName , "tcsh" ))
282- return getExeVersionGeneral (exe , version ); //tcsh 6.24.07 (Astron) 2022-12-21 (aarch64-apple-darwin) options wide,nls,dl,al,kan,sm,rh,color,filec
278+ return getExeVersionGeneral (exePath , version ); //tcsh 6.24.07 (Astron) 2022-12-21 (aarch64-apple-darwin) options wide,nls,dl,al,kan,sm,rh,color,filec
283279 if (ffStrEqualsIgnCase (exeName , "nu" ))
284- return getShellVersionNushell (exe , version );
280+ return getShellVersionNushell (exePath , version );
285281 if (ffStrEqualsIgnCase (exeName , "ksh" ))
286- return getShellVersionKsh (exe , version );
282+ return getShellVersionKsh (exePath , version );
287283 if (ffStrEqualsIgnCase (exeName , "oksh" ))
288- return getShellVersionOksh (exe , version );
284+ return getShellVersionOksh (exePath , version );
289285 if (ffStrEqualsIgnCase (exeName , "oil.ovm" ))
290- return getShellVersionOils (exe , version );
286+ return getShellVersionOils (exePath , version );
291287 if (ffStrEqualsIgnCase (exeName , "elvish" ))
292- return getExeVersionRaw (exe , version );
288+ return getExeVersionRaw (exePath , version );
293289 if (ffStrEqualsIgnCase (exeName , "ash" ))
294- return getShellVersionAsh (exe , version );
290+ return getShellVersionAsh (exePath , version );
295291 if (ffStrEqualsIgnCase (exeName , "xonsh" ))
296- return getShellVersionXonsh (exe , version );
292+ return getShellVersionXonsh (exePath , version );
297293 if (ffStrEqualsIgnCase (exeName , "brush" ))
298- return getExeVersionGeneral (exe , version ); // brush 0.2.23 (git:2835487)
294+ return getExeVersionGeneral (exePath , version ); // brush 0.2.23 (git:2835487)
299295
300296 #ifdef _WIN32
301297 if (ffStrEqualsIgnCase (exeName , "powershell" ) || ffStrEqualsIgnCase (exeName , "powershell_ise" ))
302- return getShellVersionWinPowerShell (exe , version );
298+ return getShellVersionWinPowerShell (exePath , version );
303299
304- return getFileVersion (exe , NULL , version );
300+ return getFileVersion (exePath , NULL , version );
305301 #endif
306302
307303 return false;
0 commit comments