Hi, I am trying to make M2Crypto build on Windows again (https://gitlab.com/m2crypto/m2crypto/merge_requests/26). I have replaced by POSIX's poll by WSAPoll( I know about https://daniel.haxx.se/blog/2012/10/10/wsapoll-is-broken/ but we don't play with the error values, which is a mistake, I know, so we shouldn't be affected). The second problem is that VC++ compiler crashes on problems with CONF_VALUE. Originally M2Crypto had this (https://gitlab.com/m2crypto/m2crypto/blob/master/SWIG/_x509.i#L514): #if OPENSSL_VERSION_NUMBER >= 0x10000000L LHASH_OF(CONF_VALUE) #else LHASH #endif *x509v3_lhash() { return lh_new(NULL, NULL); /* Should probably be lh_CONF_VALUE_new but won't compile. */ } Apparently, using lh_new(NULL, NULL) is not good enough for VC++ and it crashes on it (https://ci.appveyor.com/project/mcepl/m2crypto-nngqn/build/job/e7q2ogndlje2x2h9) After a deep dive into lhash(3) and some examples on github, I have created this: /* typedef struct { char *section; char *name; char *value; } CONF_VALUE; */ unsigned long CONF_VALUE_hash(const CONF_VALUE *v) { char *v_key, *hash_hex; v_key = strncat(v1->section, v1->name, 1024); v_key = strncat(v1_key, v1->value, 2048); return *(unsigned long *) SHA256(v_key, strlen(v_key), hash_hex); } static IMPLEMENT_LHASH_HASH_FN(CONF_VALUE_hash, const CONF_VALUE*); int CONF_VALUE_cmp(const CONF_VALUE *v1, const CONF_VALUE *v2) { char *v1_key, *v2_key; v1_key = strncat(v1->section, v1->name, 1024); v1_key = strncat(v1_key, v1->value, 2048); v2_key = strncat(v2->section, v2->name, 1024); v2_key = strncat(v2_key, v2->value, 2048); return strncmp(v1_key, v2_key, 2048); } static IMPLEMENT_LHASH_COMP_FN(CONF_VALUE_cmp, const CONF_VALUE*); #if OPENSSL_VERSION_NUMBER >= 0x10000000L LHASH_OF(CONF_VALUE) #else LHASH #endif *x509v3_lhash() { return lh_CONF_VALUE_new(CONF_VALUE_hash, CONF_VALUE_cmp); } but gcc still fails to compile with error: SWIG/_x509.i:554: Error: Macro 'lh_CONF_VALUE_new' expects no arguments lh_CONF_VALUE_new with arguments is however exactly what I found on the Internet (and in crypt/conf/conf_api.c, which seems to be the only use of lh_CONF_VALUE_new in OpenSSL tree). Using openssl-1.0.1e-56.el7.x86_64 on RHEL-7. Could anybody enlighten me, how to make lh_CONF_VALUE_new working, please? Thank you, Mat?j -- https://matej.ceplovi.cz/blog/, Jabber: mcepl at ceplovi.cz GPG Finger: 89EF 4BC6 288A BF43 1BAB 25C3 E09F EF25 D964 84AC You either die a hero or you live long enough to see yourself become the villain. -- Harvey Dent in The Dark Knight