Why?
I don't think that the freefunc is declared as such in the old openssl version.

with the definition
-#define sk_GENERAL_NAME_freefunc void()(void)

the compile aborts with the SunPro C compiler.

platforms/unix/plugins/SqueakSSL/sqUnixOpenSSL.inc", line 122: operands have incompatible types:
pointer to function(pointer to void) returning void ":" pointer to function(pointer to struct GENERAL_NAME_st {int type, union {..} d}) returning void

With the definition
+#define sk_GENERAL_NAME_freefunc void()(GENERAL_NAME)

compilation works.

The code

sqo_sk_GENERAL_NAME_pop_free(sANs, (sk_GENERAL_NAME_freefunc)sqo_sk_free);

expanded - with the old defintion of sk_GENERAL_NAME_freefunc - to:

sk_pop_free ( ( ( _STACK * ) ( 1 ? ( sANs ) : ( struct stack_st_GENERAL_NAME * ) 0 ) ) , ( ( void ( * ) ( void * ) ) ( ( 1 ? ( ( void ( * ) ( void * ) ) sk_free ) : ( void ( * ) ( GENERAL_NAME * ) ) 0 ) ) ) );

with the new definition of sk_GENERAL_NAME_freefunc it expands to :

             sk_pop_free ( ( ( _STACK * ) ( 1 ? ( sANs ) : ( struct stack_st_GENERAL_NAME * ) 0 ) ) , ( ( void ( * ) ( void * ) ) ( ( 1 ? ( ( void ( * ) ( GENERAL_NAME * ) ) sk_free ) : ( void ( * ) ( GENERAL_NAME * ) ) 0 ) ) ) );

which the SUNpro compiler accepts.


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.