size = sizeof(void*);
}
- list = calloc(1, sizeof(*list) + size);
+ list = pecalloc(1, sizeof(*list) + size, 1);
list->size = size;
list->dtor = dtor;
struct psi_plist *psi_plist_copy(struct psi_plist *list, void (*ctor)(void *))
{
size_t i;
- struct psi_plist *copy = calloc(1, sizeof(*list) + list->size + list->count * list->size);
+ struct psi_plist *copy = pecalloc(1, sizeof(*list) + list->size + list->count * list->size, 1);
*copy = *list;
if (list->count) {
struct psi_plist *psi_plist_add(struct psi_plist *list, void *ptr) {
if (list && list->count) {
- list = realloc(list, sizeof(*list) + list->size + list->count * list->size);
+ list = safe_perealloc(list, list->count + 1, list->size, sizeof(*list), 1);
}
if (list) {
PLIST_CPY(list, PLIST_ELE(list, list->count++), ptr);
struct psi_plist *psi_plist_add_r(struct psi_plist *list, size_t num_eles, void **eles) {
if (list) {
- list = realloc(list, sizeof(*list) + list->size + (num_eles + list->count) * list->size);
+ list = safe_perealloc(list, list->count + num_eles + 1, list->size, sizeof(*list), 1);
}
if (list) {
memcpy(PLIST_ELE(list, list->count), eles, num_eles * list->size);
return false;
}
+bool psi_plist_unset(struct psi_plist *list, size_t index) {
+ if (list && list->count > index) {
+ memset(PLIST_ELE(list, index), 0, list->size);
+ return true;
+ }
+ return false;
+}
+
bool psi_plist_del(struct psi_plist *list, size_t index, void *ptr) {
if (list && list->count > index) {
if (ptr) {
if (list) {
new_count = MAX(list->count + 1, index);
if (new_count) {
- list = realloc(list, sizeof(*list) + list->size + new_count * list->size);
+ list = safe_perealloc(list, new_count + 1, list->size, sizeof(*list), 1);
}
if (list) {
PLIST_MOV_EXPAND(list, index);
if (list) {
new_count = MAX(offset_start, list->count) + num_eles;
if (new_count) {
- list = realloc(list, sizeof(*list) + list->size + new_count * list->size);
+ list = safe_perealloc(list, new_count + 1, list->size, sizeof(*list), 1);
}
if (list) {
- size_t e;
-
PLIST_MOV_EXPAND_EX(list, offset_start, num_eles);
PLIST_CPY_R(list, PLIST_ELE(list, offset_start), eles, num_eles);
list->count = new_count;