diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/batch.c | 21 | ||||
-rw-r--r-- | src/lib/mdb.h | 2 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/lib/batch.c b/src/lib/batch.c index 3991973..52cc399 100644 --- a/src/lib/batch.c +++ b/src/lib/batch.c @@ -15,14 +15,14 @@ tablist_t *setkey_copy; char *setkey_str; mtx_t setkey_mtx; -int setkeys(tablist_t **list, char *pair) +int setkeys(tablist_t *list, char *pair) { int rc = 0; - setkey_copy = calloc(list[0]->len, sizeof(tablist_t)); - copytab(setkey_copy, *list); + setkey_copy = calloc(list[0].len, sizeof(tablist_t)); + copytab(setkey_copy, list); setkey_str = pair; - thrd_t *thrds = calloc(list[0]->len, sizeof(thrd_t)); + thrd_t *thrds = calloc(list[0].len, sizeof(thrd_t)); if (mtx_init(&setkey_mtx, mtx_plain) != thrd_success) return -1; @@ -35,8 +35,8 @@ int setkeys(tablist_t **list, char *pair) thrd_join(thrds[i], &rc); } if (!rc) { - dellist(*list); - memcpy(*list, setkey_copy, setkey_copy[0].len * sizeof(tablist_t)); + dellist(list); + memcpy(list, setkey_copy, setkey_copy[0].len * sizeof(tablist_t)); } else dellist(setkey_copy); free(thrds); @@ -96,7 +96,14 @@ static int delkey_helper(void *thr_data) int *id = (int *) thr_data; mtx_lock(&delkey_mtx); - rc = delkey(delkey_copy, *id, delkey_str); + if (delkey_str) + rc = delkey(delkey_copy, *id, delkey_str); + else { + int *indexes = getkeys(delkey_copy, *id); + for (int i = 0; indexes[i]; ++i) + delkey(delkey_copy, *id, delkey_copy[*id].tab[indexes[i]].key); + free(indexes); + } mtx_unlock(&delkey_mtx); free(id); diff --git a/src/lib/mdb.h b/src/lib/mdb.h index f1c6a1c..56bed05 100644 --- a/src/lib/mdb.h +++ b/src/lib/mdb.h @@ -24,7 +24,7 @@ int setkey(tablist_t **list, int id, char *pair); int delkey(tablist_t *list, int id, char *key); int *getkeys(tablist_t *list, int id); -int setkeys(tablist_t **list, char *pair); +int setkeys(tablist_t *list, char *pair); int delkeys(tablist_t *list, char *key); // file operations |