summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/batch.c21
-rw-r--r--src/lib/mdb.h2
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