diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/vector.c | 23 | ||||
-rw-r--r-- | src/vector.h | 14 |
2 files changed, 19 insertions, 18 deletions
diff --git a/src/vector.c b/src/vector.c index 6638fbe..e90a3f2 100644 --- a/src/vector.c +++ b/src/vector.c @@ -1,4 +1,4 @@ -/* $Id: vector.c,v 1.8 2003-05-29 21:07:22 rjkaes Exp $ +/* $Id: vector.c,v 1.9 2003-05-30 16:21:48 rjkaes Exp $ * * A vector implementation. The vector can be of an arbitrary length, and * the data for each entry is an lump of data (the size is stored in the @@ -168,23 +168,20 @@ vector_prepend(vector_t vector, void *data, ssize_t len) } /* - * A pointer to the data at position "pos" (zero based) is returned in the - * "data" pointer. If the vector is out of bound, data is set to NULL. + * A pointer to the data at position "pos" (zero based) is returned. + * If the vector is out of bound, data is set to NULL. * * Returns: negative upon an error * length of data if position is valid */ -ssize_t -vector_getentry(vector_t vector, size_t pos, void **data) +void * +vector_getentry(vector_t vector, size_t pos, size_t* size) { struct vectorentry_s *ptr; size_t loc; - if (!vector || !data) - return -EINVAL; - - if (pos < 0 || pos >= vector->num_entries) - return -ERANGE; + if (!vector || pos < 0 || pos >= vector->num_entries) + return NULL; loc = 0; ptr = vector->head; @@ -194,8 +191,10 @@ vector_getentry(vector_t vector, size_t pos, void **data) loc++; } - *data = ptr->data; - return ptr->len; + if (size) + *size = ptr->len; + + return ptr->data; } /* diff --git a/src/vector.h b/src/vector.h index 1600ce8..c125e85 100644 --- a/src/vector.h +++ b/src/vector.h @@ -1,4 +1,4 @@ -/* $Id: vector.h,v 1.3 2003-05-29 21:07:22 rjkaes Exp $ +/* $Id: vector.h,v 1.4 2003-05-30 16:21:47 rjkaes Exp $ * * A vector implementation. The vector can be of an arbritrary length, and * the data for each entry is an lump of data (the size is stored in the @@ -55,8 +55,8 @@ extern int vector_append(vector_t vector, void *data, ssize_t len); extern int vector_prepend(vector_t vector, void *data, ssize_t len); /* - * A pointer to the data at position "pos" (zero based) is returned in the - * "data" pointer. If the vector is out of bound, data is set to NULL. + * A pointer to the data at position "pos" (zero based) is returned and the + * size pointer contains the length of the data stored. * * The pointer points to the actual data in the vector, so you have * the power to modify the data, but do it responsibly since the @@ -65,10 +65,12 @@ extern int vector_prepend(vector_t vector, void *data, ssize_t len); * likely mess up the "length" parameter of the data.) However, DON'T * try to realloc or free the data; doing so will break the vector. * - * Returns: negative upon an error - * length of data if position is valid + * If "size" is NULL the size of the data is not returned. + * + * Returns: NULL on error + * valid pointer to data */ -extern ssize_t vector_getentry(vector_t vector, size_t pos, void **data); +extern void* vector_getentry(vector_t vector, size_t pos, size_t* size); /* * Returns the number of enteries (or the length) of the vector. |