diff options
Diffstat (limited to 'src/slist.c')
-rw-r--r-- | src/slist.c | 460 |
1 files changed, 230 insertions, 230 deletions
diff --git a/src/slist.c b/src/slist.c index 30de938e4..cf84f69a0 100644 --- a/src/slist.c +++ b/src/slist.c @@ -29,34 +29,34 @@ static SListOpts slist_defopts = { 0, NULL, NULL, NULL }; */ int slist_add(SList * slist, void *item) { - if (slist->limit != 0 && slist->count >= slist->limit) - return -2; - if (slist->opts && (slist->opts->flags & SLISTF_NODUP) - && slist_indexof(slist, item) != -1) - return -3; - if (slist->capacity == slist->count) - slist_setcapacity(slist, slist->capacity + 1); - - if (slist->opts && (slist->opts->flags & SLISTF_SORT) - && slist->opts->compareitem) { - int i; - - for (i = 0; i < slist->count; i++) { - if (slist->opts->compareitem(slist, item, slist->list[i]) <= 0) { - memmove(&slist->list[i + 1], &slist->list[i], - sizeof(void *) * (slist->count - i)); - slist->list[i] = item; - break; - } - } - - if (i == slist->count) - slist->list[slist->count] = item; - } else { - slist->list[slist->count] = item; - } - - return slist->count++; + if (slist->limit != 0 && slist->count >= slist->limit) + return -2; + if (slist->opts && (slist->opts->flags & SLISTF_NODUP) + && slist_indexof(slist, item) != -1) + return -3; + if (slist->capacity == slist->count) + slist_setcapacity(slist, slist->capacity + 1); + + if (slist->opts && (slist->opts->flags & SLISTF_SORT) + && slist->opts->compareitem) { + int i; + + for (i = 0; i < slist->count; i++) { + if (slist->opts->compareitem(slist, item, slist->list[i]) <= 0) { + memmove(&slist->list[i + 1], &slist->list[i], + sizeof(void *) * (slist->count - i)); + slist->list[i] = item; + break; + } + } + + if (i == slist->count) + slist->list[slist->count] = item; + } else { + slist->list[slist->count] = item; + } + + return slist->count++; } /*************************************************************************/ @@ -70,20 +70,20 @@ int slist_add(SList * slist, void *item) */ void slist_clear(SList * slist, int mustfree) { - if (mustfree && slist->opts && slist->opts->freeitem && slist->count) { - int i; - - for (i = 0; i < slist->count; i++) - if (slist->list[i]) - slist->opts->freeitem(slist, slist->list[i]); - } - - if (slist->list) { - free(slist->list); - slist->list = NULL; - } - slist->capacity = 0; - slist->count = 0; + if (mustfree && slist->opts && slist->opts->freeitem && slist->count) { + int i; + + for (i = 0; i < slist->count; i++) + if (slist->list[i]) + slist->opts->freeitem(slist, slist->list[i]); + } + + if (slist->list) { + free(slist->list); + slist->list = NULL; + } + slist->capacity = 0; + slist->count = 0; } /*************************************************************************/ @@ -97,23 +97,23 @@ void slist_clear(SList * slist, int mustfree) */ int slist_delete(SList * slist, int index) { - /* Range check */ - if (index >= slist->count) - return 0; + /* Range check */ + if (index >= slist->count) + return 0; - if (slist->list[index] && slist->opts && slist->opts->freeitem) - slist->opts->freeitem(slist, slist->list[index]); + if (slist->list[index] && slist->opts && slist->opts->freeitem) + slist->opts->freeitem(slist, slist->list[index]); - slist->list[index] = NULL; - slist->count--; + slist->list[index] = NULL; + slist->count--; - if (index < slist->count) - memmove(&slist->list[index], &slist->list[index + 1], - sizeof(void *) * (slist->count - index)); + if (index < slist->count) + memmove(&slist->list[index], &slist->list[index + 1], + sizeof(void *) * (slist->count - index)); - slist_setcapacity(slist, slist->capacity - 1); + slist_setcapacity(slist, slist->capacity - 1); - return 1; + return 1; } /*************************************************************************/ @@ -128,65 +128,65 @@ int slist_delete(SList * slist, int index) * @return int */ int slist_delete_range(SList * slist, char *range, slist_delcheckcb_t cb, - ...) + ...) { - int count = 0, i, n1, n2; - va_list args, preserve; - - va_start(args, cb); - - for (;;) { - n1 = n2 = strtol(range, (char **) &range, 10); - range += strcspn(range, "0123456789,-"); - - if (*range == '-') { - range++; - range += strcspn(range, "0123456789,"); - if (isdigit(*range)) { - n2 = strtol(range, (char **) &range, 10); - range += strcspn(range, "0123456789,-"); - } - } - - for (i = n1; i <= n2 && i > 0 && i <= slist->count; i++) { - - if (!slist->list[i - 1]) - continue; - - /* copy this off the stack for safety's sake --nenolod */ - VA_COPY(preserve, args); - - if (cb && !cb(slist, slist->list[i - 1], preserve)) { - va_end(preserve); - return -1; - } - - /* if it's to be freed, lets free it */ - if (slist->opts && slist->opts->freeitem) - slist->opts->freeitem(slist, slist->list[i - 1]); - slist->list[i - 1] = NULL; - - /* and release the copied list */ - va_end(preserve); - - count++; - } - - range += strcspn(range, ","); - if (*range) - range++; - else - break; - } - - /* We only really delete the items from the list after having processed - * everything because it would change the position of the items in the - * list otherwise. - */ - slist_pack(slist); - - va_end(args); - return count; + int count = 0, i, n1, n2; + va_list args, preserve; + + va_start(args, cb); + + for (;;) { + n1 = n2 = strtol(range, (char **) &range, 10); + range += strcspn(range, "0123456789,-"); + + if (*range == '-') { + range++; + range += strcspn(range, "0123456789,"); + if (isdigit(*range)) { + n2 = strtol(range, (char **) &range, 10); + range += strcspn(range, "0123456789,-"); + } + } + + for (i = n1; i <= n2 && i > 0 && i <= slist->count; i++) { + + if (!slist->list[i - 1]) + continue; + + /* copy this off the stack for safety's sake --nenolod */ + VA_COPY(preserve, args); + + if (cb && !cb(slist, slist->list[i - 1], preserve)) { + va_end(preserve); + return -1; + } + + /* if it's to be freed, lets free it */ + if (slist->opts && slist->opts->freeitem) + slist->opts->freeitem(slist, slist->list[i - 1]); + slist->list[i - 1] = NULL; + + /* and release the copied list */ + va_end(preserve); + + count++; + } + + range += strcspn(range, ","); + if (*range) + range++; + else + break; + } + + /* We only really delete the items from the list after having processed + * everything because it would change the position of the items in the + * list otherwise. + */ + slist_pack(slist); + + va_end(args); + return count; } /*************************************************************************/ @@ -203,79 +203,79 @@ int slist_delete_range(SList * slist, char *range, slist_delcheckcb_t cb, */ int slist_enum(SList * slist, char *range, slist_enumcb_t cb, ...) { - int count = 0, i, res; - va_list args, preserve; - - va_start(args, cb); - - if (!range) { - for (i = 0; i < slist->count; i++) { - if (!slist->list[i]) { - alog("SList: warning: NULL pointer in the list (?)"); - continue; - } - - /* copy off stack for safety */ - VA_COPY(preserve, args); - - res = cb(slist, i + 1, slist->list[i], preserve); - if (res < 0) { - va_end(preserve); - break; - } - - /* and release our copy */ - va_end(preserve); - - count += res; - } - } else { - int n1, n2; - - for (;;) { - res = 0; - n1 = n2 = strtol(range, (char **) &range, 10); - range += strcspn(range, "0123456789,-"); - if (*range == '-') { - range++; - range += strcspn(range, "0123456789,"); - if (isdigit(*range)) { - n2 = strtol(range, (char **) &range, 10); - range += strcspn(range, "0123456789,-"); - } - } - for (i = n1; i <= n2 && i > 0 && i <= slist->count; i++) { - if (!slist->list[i - 1]) { - alog("SList: warning: NULL pointer in the list (?)"); - continue; - } - - /* copy off stack for safety */ - VA_COPY(preserve, args); - - res = cb(slist, i, slist->list[i - 1], preserve); - if (res < 0) { - va_end(preserve); - break; - } - count += res; - - /* and release our copy */ - va_end(preserve); - } - if (res < -1) - break; - range += strcspn(range, ","); - if (*range) - range++; - else - break; - } - } - - va_end(args); - - return count; + int count = 0, i, res; + va_list args, preserve; + + va_start(args, cb); + + if (!range) { + for (i = 0; i < slist->count; i++) { + if (!slist->list[i]) { + alog("SList: warning: NULL pointer in the list (?)"); + continue; + } + + /* copy off stack for safety */ + VA_COPY(preserve, args); + + res = cb(slist, i + 1, slist->list[i], preserve); + if (res < 0) { + va_end(preserve); + break; + } + + /* and release our copy */ + va_end(preserve); + + count += res; + } + } else { + int n1, n2; + + for (;;) { + res = 0; + n1 = n2 = strtol(range, (char **) &range, 10); + range += strcspn(range, "0123456789,-"); + if (*range == '-') { + range++; + range += strcspn(range, "0123456789,"); + if (isdigit(*range)) { + n2 = strtol(range, (char **) &range, 10); + range += strcspn(range, "0123456789,-"); + } + } + for (i = n1; i <= n2 && i > 0 && i <= slist->count; i++) { + if (!slist->list[i - 1]) { + alog("SList: warning: NULL pointer in the list (?)"); + continue; + } + + /* copy off stack for safety */ + VA_COPY(preserve, args); + + res = cb(slist, i, slist->list[i - 1], preserve); + if (res < 0) { + va_end(preserve); + break; + } + count += res; + + /* and release our copy */ + va_end(preserve); + } + if (res < -1) + break; + range += strcspn(range, ","); + if (*range) + range++; + else + break; + } + } + + va_end(args); + + return count; } /*************************************************************************/ @@ -287,10 +287,10 @@ int slist_enum(SList * slist, char *range, slist_enumcb_t cb, ...) */ int slist_full(SList * slist) { - if (slist->limit != 0 && slist->count >= slist->limit) - return 1; - else - return 0; + if (slist->limit != 0 && slist->count >= slist->limit) + return 1; + else + return 0; } /*************************************************************************/ @@ -302,9 +302,9 @@ int slist_full(SList * slist) */ void slist_init(SList * slist) { - memset(slist, 0, sizeof(SList)); - slist->limit = SLIST_DEFAULT_LIMIT; - slist->opts = &slist_defopts; + memset(slist, 0, sizeof(SList)); + slist->limit = SLIST_DEFAULT_LIMIT; + slist->opts = &slist_defopts; } /*************************************************************************/ @@ -317,22 +317,22 @@ void slist_init(SList * slist) */ int slist_indexof(SList * slist, void *item) { - int16 i; - void *entry; - - if (slist->count == 0) - return -1; - - for (i = 0, entry = slist->list[0]; i < slist->count; - i++, entry = slist->list[i]) { - if ((slist->opts - && slist->opts->isequal) ? (slist->opts->isequal(slist, item, - entry)) - : (item == entry)) - return i; - } - - return -1; + int16 i; + void *entry; + + if (slist->count == 0) + return -1; + + for (i = 0, entry = slist->list[0]; i < slist->count; + i++, entry = slist->list[i]) { + if ((slist->opts + && slist->opts->isequal) ? (slist->opts->isequal(slist, item, + entry)) + : (item == entry)) + return i; + } + + return -1; } /*************************************************************************/ @@ -344,11 +344,11 @@ int slist_indexof(SList * slist, void *item) */ void slist_pack(SList * slist) { - int i; + int i; - for (i = slist->count - 1; i >= 0; i--) - if (!slist->list[i]) - slist_delete(slist, i); + for (i = slist->count - 1; i >= 0; i--) + if (!slist->list[i]) + slist_delete(slist, i); } /*************************************************************************/ @@ -362,11 +362,11 @@ void slist_pack(SList * slist) */ int slist_remove(SList * slist, void *item) { - int index = slist_indexof(slist, item); - if (index == -1) - return -1; - slist_delete(slist, index); - return index; + int index = slist_indexof(slist, item); + if (index == -1) + return -1; + slist_delete(slist, index); + return index; } /*************************************************************************/ @@ -379,17 +379,17 @@ int slist_remove(SList * slist, void *item) */ int slist_setcapacity(SList * slist, int16 capacity) { - if (slist->capacity == capacity) - return 1; - slist->capacity = capacity; - if (slist->capacity) - slist->list = - (void **)srealloc(slist->list, sizeof(void *) * slist->capacity); - else { - free(slist->list); - slist->list = NULL; - } - if (slist->capacity < slist->count) - slist->count = slist->capacity; - return 1; + if (slist->capacity == capacity) + return 1; + slist->capacity = capacity; + if (slist->capacity) + slist->list = + (void **)srealloc(slist->list, sizeof(void *) * slist->capacity); + else { + free(slist->list); + slist->list = NULL; + } + if (slist->capacity < slist->count) + slist->count = slist->capacity; + return 1; } |