[PATCH] Fix uninitialized variable with wrong type

Yuriy Skalko yuriy.skalko at gmail.com
Thu Sep 10 12:30:18 UTC 2020


> Am Wed, 9 Sep 2020 22:14:40 +0200
> schrieb Kornel Benko <kor... at lyx.org>:
> 
>> > Since pclose (Unix) returns signed int and GetExitCodeProcess (Windows)
>> > returns unsigned DWORD, and then result is compared with -1 in common
>> > branch, now I don't see clean way to get rid of the warning in this mix
>> > of conditional compilation branches. Let's leave as it is now.
>> > 
>> > There is similar mix of signed/unsigned in ForkedCalls.cpp (setRetValue
>> > call) but without compiler warnings.
>> > 
>> > 
>> > Yuriy
>> >   
>> 
>> What about this?
>> 
>>       Kornel
> 
> Forget it. Maybe this is better.
> 

Yes, it solves this issue, but adding variable for this is not clean
enough as for me :)
Here is another not-so-clean solution with reinterpret_cast:


diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp
index d6b27856cb..52a9ff950a 100644
--- a/src/support/filetools.cpp
+++ b/src/support/filetools.cpp
@@ -1107,8 +1107,8 @@ cmd_ret const runCommand(string const & cmd)

 #if defined (_WIN32)
 	WaitForSingleObject(process.hProcess, INFINITE);
-	DWORD pret;
-	if (!GetExitCodeProcess(process.hProcess, &pret))
+	int pret = 0;
+	if (!GetExitCodeProcess(process.hProcess,
reinterpret_cast<LPDWORD>(&pret)))
 		pret = -1;
 	if (!infile.empty())
 		CloseHandle(startup.hStdInput);



>         Kornel
> 
> diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp
> index d6b27856cb..9ce6cd1cfc 100644
> --- a/src/support/filetools.cpp
> +++ b/src/support/filetools.cpp
> @@ -1105,13 +1105,16 @@ cmd_ret const runCommand(string const & cmd)
>  		c = fgetc(inf);
>  	}
>  
>  #if defined (_WIN32)
>  	WaitForSingleObject(process.hProcess, INFINITE);
> -	DWORD pret;
> -	if (!GetExitCodeProcess(process.hProcess, &pret))
> +	DWORD pretw;
> +	int pret;
> +	if (!GetExitCodeProcess(process.hProcess, &pretw))
>  		pret = -1;
> +	else
> +		pret = (int) pretw;
>  	if (!infile.empty())
>  		CloseHandle(startup.hStdInput);
>  	CloseHandle(process.hProcess);
>  	if (fclose(inf) != 0)
>  		pret = -1;




More information about the lyx-devel mailing list