On Thu, Oct 19 2017, Jeremie Courreges-Anglas <[email protected]> wrote:
> When building an updated version of ports/security/polarssl, I hit the
> following failure:
>
> [219/427] /usr/ports/pobj/mbedtls-2.6.0/bin/cc  
> -I/usr/ports/pobj/mbedtls-2.6.0/mbedtls-2.6.0/include 
> -I/usr/ports/pobj/mbedtls-2.6.0/mbedtls-2.6.0/tests -O2 -pipe -Wall -Wextra 
> -W -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith 
> -Wimplicit-fallthrough -Wshadow -Wno-unused-function -DNDEBUG -MD -MT 
> tests/CMakeFiles/test_suite_hmac_drbg.misc.dir/test_suite_hmac_drbg.misc.c.o 
> -MF 
> tests/CMakeFiles/test_suite_hmac_drbg.misc.dir/test_suite_hmac_drbg.misc.c.o.d
>  -o 
> tests/CMakeFiles/test_suite_hmac_drbg.misc.dir/test_suite_hmac_drbg.misc.c.o  
>  -c tests/test_suite_hmac_drbg.misc.c
> FAILED: 
> tests/CMakeFiles/test_suite_hmac_drbg.misc.dir/test_suite_hmac_drbg.misc.c.o 
> /usr/ports/pobj/mbedtls-2.6.0/bin/cc  
> -I/usr/ports/pobj/mbedtls-2.6.0/mbedtls-2.6.0/include 
> -I/usr/ports/pobj/mbedtls-2.6.0/mbedtls-2.6.0/tests -O2 -pipe -Wall -Wextra 
> -W -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith 
> -Wimplicit-fallthrough -Wshadow -Wno-unused-function -DNDEBUG -MD -MT 
> tests/CMakeFiles/test_suite_hmac_drbg.misc.dir/test_suite_hmac_drbg.misc.c.o 
> -MF 
> tests/CMakeFiles/test_suite_hmac_drbg.misc.dir/test_suite_hmac_drbg.misc.c.o.d
>  -o 
> tests/CMakeFiles/test_suite_hmac_drbg.misc.dir/test_suite_hmac_drbg.misc.c.o  
>  -c tests/test_suite_hmac_drbg.misc.c
> main_test.function:411:50: error: cannot take the address of an rvalue of 
> type 'FILE *' (aka 'struct __sFILE *')
>                     stdout_fd = redirect_output( &stdout, "/dev/null" );
>                                                  ^~~~~~~
> main_test.function:423:56: error: cannot take the address of an rvalue of 
> type 'FILE *' (aka 'struct __sFILE *')
>                 if( !option_verbose && restore_output( &stdout, stdout_fd ) )
>                                                        ^~~~~~~
> 2 errors generated.
> ninja: build stopped: subcommand failed.
>
> And indeed, stdio.h declares stdout as follows:
>
>   #define     stdin   (&__sF[0])
>   #define     stdout  (&__sF[1])
>   #define     stderr  (&__sF[2])
>
> POSIX says pretty much the same as the C standard:
>
>   The <stdio.h> header shall define the following macros which shall
>   expand to expressions of type "pointer to FILE" that point to the FILE
>   objects associated, respectively, with the standard error, input, and
>   output streams:
>
> So maybe libc should expose stdin/out/err as individual, modifiable
> pointers?  This is what FreeBSD seems to do.

The C standard says:

  The primary use of the freopen function is to change the file
  associated with a standard text stream (stderr, stdin, or stdout), as
  those identifiers need not be modifiable lvalues to which the value
  returned by the fopen function may be assigned.

so I guess that a valid way to "solve" this problem is just to fix the
offending application.

-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to