summaryrefslogtreecommitdiff
path: root/src/slist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/slist.c')
-rw-r--r--src/slist.c460
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;
}