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.