summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/batch.c2
-rw-r--r--src/lib/keytab.c4
-rw-r--r--src/main.c108
-rw-r--r--src/test.c3
4 files changed, 77 insertions, 40 deletions
diff --git a/src/lib/batch.c b/src/lib/batch.c
index 52cc399..5046d82 100644
--- a/src/lib/batch.c
+++ b/src/lib/batch.c
@@ -101,7 +101,7 @@ static int delkey_helper(void *thr_data)
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);
+ rc = delkey(delkey_copy, *id, delkey_copy[*id].tab[indexes[i]].key);
free(indexes);
}
mtx_unlock(&delkey_mtx);
diff --git a/src/lib/keytab.c b/src/lib/keytab.c
index 7f73afb..c8b1f75 100644
--- a/src/lib/keytab.c
+++ b/src/lib/keytab.c
@@ -44,6 +44,8 @@ tabidx_t getkey(tablist_t *list, int id, char *key)
// if setkey fails it will return 1 otherwise 0
int setkey(tablist_t **list, int id, char *pair)
{
+ if (pair == NULL)
+ return 1;
if (id >= (*list)[0].len) {
*list = realloc(*list, (id + 1) * sizeof(tablist_t));
for (int i = (*list)[0].len; i <= id; ++i) {
@@ -54,7 +56,7 @@ int setkey(tablist_t **list, int id, char *pair)
}
char **kv = getkv(pair);
if (kv == NULL)
- return 1;
+ return 2;
int idx = hash(kv[0]);
while ((*list)[id].tab[idx].key != NULL &&
diff --git a/src/main.c b/src/main.c
index d1765e8..ab33a86 100644
--- a/src/main.c
+++ b/src/main.c
@@ -15,7 +15,6 @@ int delkeys_main(tablist_t **list, int id, char **keys, int klen);
int exec(int (*tabop)(tablist_t **, int, char **, int),
tablist_t **list, int id, char **keys, int klen);
-// TODO: reimplement helpers to use batch operations
int main(int argc, char **argv)
{
if (argc > 2) {
@@ -86,22 +85,46 @@ int getid(char *selector) {
int printkeys(tablist_t **list, int id, char **keys, int klen)
{
- if (keys == NULL) {
- int *indexes = getkeys(*list, id);
- printf("{ id: %d ", id);
- for (int i = 0; indexes[i]; ++i)
- printkey((*list)[id].tab[indexes[i]]);
- free(indexes);
- printf("}\n");
+ if (id > -1) {
+ if (keys == NULL) {
+ int *indexes = getkeys(*list, id);
+ printf("{ id: %d ", id);
+ for (int i = 0; indexes[i]; ++i)
+ printkey((*list)[id].tab[indexes[i]]);
+ free(indexes);
+ printf("}\n");
+ } else {
+ printf("{ id: %d ", id);
+ for (int i = 0; i < klen; ++i) {
+ tabidx_t idx = getkey(*list, id, keys[i]);
+ if (idx.flag == 0)
+ continue;
+ printkey(idx);
+ }
+ printf("}\n");
+ }
} else {
- printf("{ id: %d ", id);
- for (int i = 0; i < klen; ++i) {
- tabidx_t idx = getkey(*list, id, keys[i]);
- if (idx.flag == 0)
- continue;
- printkey(idx);
+ if (keys == NULL) {
+ for (int i = 0; i < (*list)[0].len; ++i) {
+ int *indexes = getkeys(*list, i);
+ printf("{ id: %d ", i);
+ for (int j = 0; indexes[j]; ++j)
+ printkey((*list)[i].tab[indexes[j]]);
+ free(indexes);
+ printf("}\n");
+ }
+ } else {
+ for (int i = 0; i < (*list)[0].len; ++i) {
+ printf("{ id: %d\n", i);
+ for (int j = 0; j < klen; ++j) {
+ tabidx_t idx = getkey(*list, i, keys[i]);
+ if (idx.flag == 0)
+ continue;
+ printkey(idx);
+ }
+ printf("}\n");
+ }
}
- printf("}\n");
}
return 0;
}
@@ -126,30 +149,46 @@ int setkeys_main(tablist_t **list, int id, char **pairs, int plen)
{
if (pairs == NULL)
return 1;
- for (int i = 0; i < plen; ++i) {
- char *tmp = calloc(strlen(pairs[i]) + 1, sizeof(char));
- strcpy(tmp, pairs[i]);
- if (setkey(list, id, tmp)) {
+ if (id > -1) {
+ for (int i = 0; i < plen; ++i) {
+ char *tmp = calloc(strlen(pairs[i]) + 1, sizeof(char));
+ strcpy(tmp, pairs[i]);
+ if (setkey(list, id, tmp)) {
+ free(tmp);
+ return 1;
+ }
free(tmp);
- return 1;
}
- free(tmp);
+ } else {
+ for (int i = 0; i < plen; ++i)
+ if (setkeys(*list, pairs[i]))
+ return 1;
}
return 0;
}
int delkeys_main(tablist_t **list, int id, char **keys, int klen)
{
- if (keys == NULL) {
- int *indexes = getkeys(*list, id);
- for (int i = 0; indexes[i]; ++i)
- if (delkey(*list, id, (*list)[id].tab[indexes[i]].key))
- return 1;
- free(indexes);
+ if (id > -1) {
+ if (keys == NULL) {
+ int *indexes = getkeys(*list, id);
+ for (int i = 0; indexes[i]; ++i)
+ if (delkey(*list, id, (*list)[id].tab[indexes[i]].key))
+ return 1;
+ free(indexes);
+ } else {
+ for (int i = 0; i < klen; ++i)
+ if (delkey(*list, id, keys[i]))
+ return 1;
+ }
} else {
- for (int i = 0; i < klen; ++i)
- if (delkey(*list, id, keys[i]))
- return 1;
+ if (keys == NULL)
+ delkeys(*list, NULL);
+ else {
+ for (int i = 0; i < klen; ++i)
+ if (delkeys(*list, keys[i]))
+ return 1;
+ }
}
return 0;
}
@@ -157,14 +196,9 @@ int delkeys_main(tablist_t **list, int id, char **keys, int klen)
int exec(int (*tabop)(tablist_t **, int, char **, int),
tablist_t **list, int id, char **keys, int klen)
{
- if (id >= 0)
+ if (id >= -1)
return tabop(list, id, keys, klen);
- else if (id == -1) {
- for (int i = 0; i < (*list)[0].len; ++i)
- if (tabop(list, i, keys, klen))
- return 1;
- return 0;
- } else {
+ else {
fprintf(stderr, "Invalid id\n");
return 1;
}
diff --git a/src/test.c b/src/test.c
index eb9c827..5a4976e 100644
--- a/src/test.c
+++ b/src/test.c
@@ -54,7 +54,7 @@ void test_delkeys(void)
void test_delkeys_all(void)
{
tablist_t *list = readdb("dbs/test.db");
- if (!delkeys(list, NULL))
+ if (delkeys(list, NULL))
fprintf(stderr, "test_delkeys_all: failed\n");
free(list);
}
@@ -79,6 +79,7 @@ int main(void)
test_setkeys_fail();
test_delkeys();
+ test_delkeys_all();
test_delkeys_fail();
exit(0);