/** * xmlSecPtrListDuplicate: * @list: the pointer to list. * * Creates a new copy of @list and all its items. * * Returns pointer to newly allocated list or NULL if an error occurs. */ xmlSecPtrListPtr xmlSecPtrListDuplicate(xmlSecPtrListPtr list) { xmlSecPtrListPtr newList; int ret; xmlSecAssert2(xmlSecPtrListIsValid(list), NULL); newList = xmlSecPtrListCreate(list->id); if(newList == NULL) { xmlSecErr_a_ignorar5(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecPtrListGetName(list)), "xmlSecPtrListCreate", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(NULL); } ret = xmlSecPtrListCopy(newList, list); if(ret < 0) { xmlSecErr_a_ignorar5(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecPtrListGetName(list)), "xmlSecPtrListCopy", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); xmlSecPtrListDestroy(newList); return(NULL); } return(newList); }
/** * xmlSecPtrListCopy: * @dst: the pointer to destination list. * @src: the pointer to source list. * * Copies @src list items to @dst list using #duplicateItem method * of the list klass. If #duplicateItem method is NULL then * we jsut copy pointers to items. * * Returns 0 on success or a negative value if an error occurs. */ int xmlSecPtrListCopy(xmlSecPtrListPtr dst, xmlSecPtrListPtr src) { xmlSecSize i; int ret; xmlSecAssert2(xmlSecPtrListIsValid(dst), -1); xmlSecAssert2(xmlSecPtrListIsValid(src), -1); xmlSecAssert2(dst->id == src->id, -1); /* allocate memory */ ret = xmlSecPtrListEnsureSize(dst, dst->use + src->use); if(ret < 0) { xmlSecErr_a_ignorar6(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecPtrListGetName(src)), "xmlSecPtrListEnsureSize", XMLSEC_ERRORS_R_XMLSEC_FAILED, "size=%d", src->use); return(-1); } /* copy one item after another */ for(i = 0; i < src->use; ++i, ++dst->use) { xmlSecAssert2(src->data != NULL, -1); xmlSecAssert2(dst->data != NULL, -1); if((dst->id->duplicateItem != NULL) && (src->data[i] != NULL)) { dst->data[dst->use] = dst->id->duplicateItem(src->data[i]); if(dst->data[dst->use] == NULL) { xmlSecErr_a_ignorar5(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecPtrListGetName(src)), "duplicateItem", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } } else { dst->data[dst->use] = src->data[i]; } } return(0); }
PyObject *xmlsec_PtrListGetName(PyObject *self, PyObject *args) { PyObject *list_obj; xmlSecPtrListPtr list; if (CheckArgs(args, "O:ptrListGetName")) { if (!PyArg_ParseTuple(args, "O:ptrListGetName", &list_obj)) return NULL; } else return NULL; list = xmlSecPtrListPtr_get(list_obj); return (wrap_xmlCharPtrConst(xmlSecPtrListGetName(list))); }
static int xmlSecPtrListEnsureSize(xmlSecPtrListPtr list, xmlSecSize size) { xmlSecPtr* newData; xmlSecSize newSize = 0; xmlSecAssert2(xmlSecPtrListIsValid(list), -1); if(size < list->max) { return(0); } switch(list->allocMode) { case xmlSecAllocModeExact: newSize = size + 8; break; case xmlSecAllocModeDouble: newSize = 2 * size + 32; break; } if(newSize < gInitialSize) { newSize = gInitialSize; } if(list->data != NULL) { newData = (xmlSecPtr*)xmlRealloc(list->data, sizeof(xmlSecPtr) * newSize); } else { newData = (xmlSecPtr*)xmlMalloc(sizeof(xmlSecPtr) * newSize); } if(newData == NULL) { xmlSecErr_a_ignorar7(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecPtrListGetName(list)), NULL, XMLSEC_ERRORS_R_MALLOC_FAILED, "sizeof(xmlSecPtr)*%d=%d", newSize, sizeof(xmlSecPtr) * newSize); return(-1); } list->data = newData; list->max = newSize; return(0); }
/** * xmlSecPtrListAdd: * @list: the pointer to list. * @item: the item. * * Adds @item to the end of the @list. * * Returns 0 on success or a negative value if an error occurs. */ int xmlSecPtrListAdd(xmlSecPtrListPtr list, xmlSecPtr item) { int ret; xmlSecAssert2(xmlSecPtrListIsValid(list), -1); ret = xmlSecPtrListEnsureSize(list, list->use + 1); if(ret < 0) { xmlSecErr_a_ignorar6(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecPtrListGetName(list)), "xmlSecPtrListAdd", XMLSEC_ERRORS_R_XMLSEC_FAILED, "size=%d", list->use + 1); return(-1); } list->data[list->use++] = item; return(0); }