Mercurial > code
changeset 38:f69408c0441a
Modified FOREACH function for more security
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 02 Oct 2011 10:53:48 +0200 |
parents | 7119508e78ac |
children | 70a7bbe96b1d |
files | parray.h |
diffstat | 1 files changed, 9 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/parray.h Sun Oct 02 10:10:16 2011 +0200 +++ b/parray.h Sun Oct 02 10:53:48 2011 +0200 @@ -52,22 +52,19 @@ void parray_clear(struct parray *); void parray_free(struct parray *); -#define PARRAY_FOREACH(a, var) \ - for ((a)->_i = 0, var = (a)->datas[0]; \ - (a)->_i < (a)->length; ++(a)->_i, \ - var = (a)->datas[((a)->_i >= (a)->length) ? \ - (a)->length - 1 : (a)->_i]) - -#define PARRAY_FOREACH_R(a, var) \ - for ((a)->_i = (a)->length - 1, var = (a)->datas[(a)->_i]; \ - (a)->_i >= 0; \ - --(a)->_i, var = (a)->datas[((a)->_i < 0) ? 0 : (a)->_i]) - #define PARRAY_HEAD(a) \ a->datas[0] #define PARRAY_TAIL(a) \ a->datas[a->length - 1] #define PARRAY_INDEX(a, i) \ - a->datas[(i >= a->length) ? (a->length - 1) : i] + a->datas[(i < 0 || i >= (a)->length) ? 0 : i] + +#define PARRAY_FOREACH_R(a, var) \ + for ((a)->_i = (a)->length - 1, var = PARRAY_INDEX((a), (a)->_i); \ + (a)->_i >= 0; --(a)->_i, var = PARRAY_INDEX((a), (a)->_i)) + +#define PARRAY_FOREACH(a, var) \ + for ((a)->_i = 0, var = PARRAY_INDEX((a), (a)->_i); \ + (a)->_i < (a)->length; ++(a)->_i, var = PARRAY_INDEX((a), (a)->_i)) #endif /* _PARRAY_H_ */