static PyObject * UL_remove(UniqueList *self, PyObject *value) { if (UniqueList_Remove(self, value) == 0) { return Py_None; } return NULL; }
/* Set item to LDAPEntry with a case-insensitive key. */ int LDAPEntry_SetItem(LDAPEntry *self, PyObject *key, PyObject *value) { int found = 0; int rc = 0; int status = 1; char *newkey = lowercase(PyObject2char(key)); LDAPValueList *list; /* Search for a match. */ key = searchLowerCaseKeyMatch(self, key, &found); if (found == 1) { status = 2; } if (value != NULL) { /* If theres an item with a `dn` key, and with a string value set to the dn attribute. */ if (strcmp(newkey, "dn") == 0) { if (PyUnicode_Check(value)) { char *dnstr = PyObject2char(value); LDAPEntry_SetStringDN(self, dnstr); free(dnstr); } else { PyErr_SetString(PyExc_TypeError, "Distinguished name must be string type."); Py_DECREF(key); return -1; } } else { /* Set the new value to the item. */ if (LDAPValueList_Check(value) == 0) { /* Convert value to LDAPValueList object. */ list = LDAPValueList_New(); if (PyList_Check(value) || PyTuple_Check(value)) { LDAPValueList_Extend(list, value); } else { LDAPValueList_Append(list, value); } rc = PyDict_SetItem((PyObject *)self, key, (PyObject *)list); list->status = status; Py_DECREF(list); } else { rc = PyDict_SetItem((PyObject *)self, key, value); ((LDAPValueList *)value)->status = status; } /* Avoid inconsistency. (same key in the added and the deleted list) */ if (PySequence_Contains((PyObject *)self->deleted, key)) { if (UniqueList_Remove(self->deleted, key) != 0) return -1; } if (rc != 0) return rc; /* New key should be added to the attribute list. */ if (found == 0) { if (UniqueList_Append(self->attributes, key) != 0) { Py_DECREF(key); return -1; } } } } else { /* This means, it has to remove the item. */ if (PyDict_DelItem((PyObject *)self, key) != 0) return -1; if (UniqueList_Append(self->deleted, key) != 0) return -1; /* Remove from the attributes list. */ if (PySequence_DelItem((PyObject *)self->attributes, PySequence_Index((PyObject *)self->attributes, key)) != 0) { Py_DECREF(key); return -1; } } Py_DECREF(key); return 0; }