/** * 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); }
/** * xmlSecPtrListFinalize: * @list: the pointer to list. * * Cleans up the list initialized with #xmlSecPtrListInitialize * function. */ void xmlSecPtrListFinalize(xmlSecPtrListPtr list) { xmlSecAssert(xmlSecPtrListIsValid(list)); xmlSecPtrListEmpty(list); memset(list, 0, sizeof(xmlSecPtrList)); }
/** * xmlSecPtrListGetItem: * @list: the pointer to list. * @pos: the item position. * * Gets item from the list. * * Returns the list item at position @pos or NULL if @pos is greater * than the number of items in the list or an error occurs. */ xmlSecPtr xmlSecPtrListGetItem(xmlSecPtrListPtr list, xmlSecSize pos) { xmlSecAssert2(xmlSecPtrListIsValid(list), NULL); xmlSecAssert2(list->data != NULL, NULL); xmlSecAssert2(pos < list->use, NULL); return(list->data[pos]); }
/** * 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); }
/** * xmlSecPtrListSet: * @list: the pointer to list. * @item: the item. * @pos: the pos. * * Sets the value of list item at position @pos. The old value * is destroyed. * * Returns 0 on success or a negative value if an error occurs. */ int xmlSecPtrListSet(xmlSecPtrListPtr list, xmlSecPtr item, xmlSecSize pos) { xmlSecAssert2(xmlSecPtrListIsValid(list), -1); xmlSecAssert2(list->data != NULL, -1); xmlSecAssert2(pos < list->use, -1); if((list->id->destroyItem != NULL) && (list->data[pos] != NULL)) { list->id->destroyItem(list->data[pos]); } list->data[pos] = item; return(0); }
PyObject *xmlsec_PtrListIsValid(PyObject *self, PyObject *args) { PyObject *list_obj; xmlSecPtrListPtr list; if (CheckArgs(args, "O:ptrListIsValid")) { if (!PyArg_ParseTuple(args, "O:ptrListIsValid", &list_obj)) return NULL; } else return NULL; list = xmlSecPtrListPtr_get(list_obj); return (wrap_int(xmlSecPtrListIsValid(list))); }
/** * xmlSecPtrListRemove: * @list: the pointer to list. * @pos: the position. * * Destroys list item at the position @pos and sets it value to NULL. * * Returns 0 on success or a negative value if an error occurs. */ int xmlSecPtrListRemove(xmlSecPtrListPtr list, xmlSecSize pos) { xmlSecAssert2(xmlSecPtrListIsValid(list), -1); xmlSecAssert2(list->data != NULL, -1); xmlSecAssert2(pos < list->use, -1); if((list->id->destroyItem != NULL) && (list->data[pos] != NULL)) { list->id->destroyItem(list->data[pos]); } list->data[pos] = NULL; if(pos == list->use - 1) { --list->use; } return(0); }
/** * xmlSecPtrListDebugDump: * @list: the pointer to list. * @output: the pointer to output FILE. * * Prints debug information about @list to the @output. */ void xmlSecPtrListDebugDump(xmlSecPtrListPtr list, FILE* output) { xmlSecAssert(xmlSecPtrListIsValid(list)); xmlSecAssert(output != NULL); printf_a_ignorar3(output, "=== list size: %d\n", list->use); if(list->id->debugDumpItem != NULL) { xmlSecSize pos; for(pos = 0; pos < list->use; ++pos) { xmlSecAssert(list->data != NULL); if(list->data[pos] != NULL) { list->id->debugDumpItem(list->data[pos], output); } } } }
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); }
/** * xmlSecPtrListEmpty: * @list: the pointer to list. * * Remove all items from @list (if any). */ void xmlSecPtrListEmpty(xmlSecPtrListPtr list) { xmlSecAssert(xmlSecPtrListIsValid(list)); if(list->id->destroyItem != NULL) { xmlSecSize pos; for(pos = 0; pos < list->use; ++pos) { xmlSecAssert(list->data != NULL); if(list->data[pos] != NULL) { list->id->destroyItem(list->data[pos]); } } } if(list->max > 0) { xmlSecAssert(list->data != NULL); memset(list->data, 0, sizeof(xmlSecPtr) * list->use); xmlFree(list->data); } list->max = list->use = 0; list->data = NULL; }
/** * xmlSecPtrListDestroy: * @list: the pointer to list. * * Destroys @list created with #xmlSecPtrListCreate function. */ void xmlSecPtrListDestroy(xmlSecPtrListPtr list) { xmlSecAssert(xmlSecPtrListIsValid(list)); xmlSecPtrListFinalize(list); xmlFree(list); }
/** * xmlSecPtrListGetSize: * @list: the pointer to list. * * Gets list size. * * Returns the number of itmes in @list. */ xmlSecSize xmlSecPtrListGetSize(xmlSecPtrListPtr list) { xmlSecAssert2(xmlSecPtrListIsValid(list), 0); return(list->use); }