From: <mi...@st...> - 2004-03-10 18:44:45
|
HI! David, please take note of this! What was the rationale of having this macro in constants.c? What are "reversibles" in this context? #define add_int_r(d, name) \ { \ long v = LDAP_##name; \ PyObject *i = PyInt_FromLong( v ); \ PyObject *s = PyString_FromString( #name ); \ PyDict_SetItem( d, s, s ); \ PyDict_SetItem( reverse, i, s ); \ PyDict_SetItem( forward, s, i ); \ Py_DECREF(i); \ Py_DECREF(s); \ /* printf("%s -> %ld\n", #name, v ); */ \ } [..] /* reversibles */ zero = PyInt_FromLong( 0 ); PyDict_SetItem( reverse, zero, Py_None ); Py_DECREF( zero ); add_int_r(d,RES_BIND); add_int_r(d,RES_SEARCH_ENTRY); add_int_r(d,RES_SEARCH_RESULT); add_int_r(d,RES_MODIFY); add_int_r(d,RES_ADD); add_int_r(d,RES_DELETE); add_int_r(d,RES_MODRDN); add_int_r(d,RES_COMPARE); add_int(d,RES_ANY); add_int_r(d,RES_SEARCH_REFERENCE); add_int_r(d,RES_EXTENDED); add_int_r(d,RES_UNSOLICITED); It seems to map some integers from ldap.h to strings with the constant's name. For some unknown reason this does not work with OpenLDAP 2.2 libs anymore. E.g. there are integers returned by l_ldap_result() as result type and this breaks ldap.async or other code which trys to evaluate the result type as string. I have a working solution without add_int_r() which might be backward-compatible if one strictly uses constants. This looks like a good compromise for me. Any comments? Ciao, Michael. |