]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Avoid accidentally calling main() twice
authorMichael Brown <mcb30@ipxe.org>
Fri, 14 Mar 2014 15:15:14 +0000 (15:15 +0000)
committerMichael Brown <mcb30@ipxe.org>
Fri, 14 Mar 2014 16:20:55 +0000 (16:20 +0000)
EFIRC() uses PLATFORM_TO_ERRNO(), which evaluates its argument twice
(and can't trivially use a braced-group expression or an inline
function to avoid this, since it gets used outside of function
context).

The expression "EFIRC(main())" will therefore end up calling main()
twice, which is not the intended behaviour.  Every other instance of
EFIRC() is of the simple form "EFIRC(rc)", so fix by converting this
instance to match.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/prefix/efiprefix.c

index a847045a5dda9e9b6ed27f1fa878712c5f48e68a..475ea505c74644299d55c288ae1aed12e9be63bd 100644 (file)
@@ -33,11 +33,15 @@ FILE_LICENCE ( GPL2_OR_LATER );
 EFI_STATUS EFIAPI _efi_start ( EFI_HANDLE image_handle,
                               EFI_SYSTEM_TABLE *systab ) {
        EFI_STATUS efirc;
+       int rc;
 
        /* Initialise EFI environment */
        if ( ( efirc = efi_init ( image_handle, systab ) ) != 0 )
                return efirc;
 
        /* Call to main() */
-       return EFIRC ( main () );
+       if ( ( rc = main() ) != 0 )
+               return EFIRC ( rc );
+
+       return 0;
 }