Mercurial > code
changeset 147:535f12e0a5af
Add a flag to prevent insertions at out of bounds
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 11 May 2012 20:06:41 +0200 |
parents | 5109083b4794 |
children | 1558251b2cf2 |
files | array.c array.h parray.c parray.h |
diffstat | 4 files changed, 12 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/array.c Fri May 11 19:06:56 2012 +0200 +++ b/array.c Fri May 11 20:06:41 2012 +0200 @@ -109,6 +109,10 @@ int array_insert(struct array *arr, const void *data, int index) { + if (arr->flags & ARRAY_INSERTSAFE) + if (index < 0 || index > arr->length) + return -1; + if (index < 0) return array_push(arr, data); if (index >= arr->length)
--- a/array.h Fri May 11 19:06:56 2012 +0200 +++ b/array.h Fri May 11 20:06:41 2012 +0200 @@ -33,7 +33,8 @@ ARRAY_AUTO = 0, /* array grows automatically */ ARRAY_FIXED = (1 << 0), /* fixed size length */ ARRAY_FASTREMOVE = (1 << 1), /* use last object when removing */ - ARRAY_CLEARBITS = (1 << 2) /* clear data when inserting/removing */ + ARRAY_CLEARBITS = (1 << 2), /* clear data when inserting/removing */ + ARRAY_INSERTSAFE = (1 << 3) /* insertion must have valid indexes */ }; struct array {
--- a/parray.c Fri May 11 19:06:56 2012 +0200 +++ b/parray.c Fri May 11 20:06:41 2012 +0200 @@ -108,6 +108,10 @@ int parray_insert(struct parray *arr, void *data, int index) { + if (arr->flags & PARRAY_INSERTSAFE) + if (index < 0 || index > arr->length) + return -1; + if (index < 0) return parray_push(arr, data); if (index >= arr->length)
--- a/parray.h Fri May 11 19:06:56 2012 +0200 +++ b/parray.h Fri May 11 20:06:41 2012 +0200 @@ -33,7 +33,8 @@ PARRAY_AUTO = 0, /* array grows automatically */ PARRAY_FIXED = (1 << 0), /* fixed size length */ PARRAY_FASTREMOVE = (1 << 1), /* use last object when removing */ - PARRAY_NULLEND = (1 << 2) /* always has a NULL pointer at end */ + PARRAY_NULLEND = (1 << 2), /* always has a NULL pointer at end */ + PARRAY_INSERTSAFE = (1 << 3) /* insertion must have valid indexes */ }; struct parray {