summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/batch.c12
-rw-r--r--src/lib/file.c14
-rw-r--r--src/lib/getkeys.c0
-rw-r--r--src/lib/keytab.c44
-rw-r--r--src/lib/mdb.h2
5 files changed, 37 insertions, 35 deletions
diff --git a/src/lib/batch.c b/src/lib/batch.c
index eb53631..998abb9 100644
--- a/src/lib/batch.c
+++ b/src/lib/batch.c
@@ -123,9 +123,9 @@ static int delkey_helper(void *thr_data)
rc = delkey(delkey_copy, *id, delkeys_keys[i]);
}
else {
- tabidx_t *indexes = getkeys(delkey_copy, *id, NULL, 0);
- for (int i = 0; indexes[i].flag; ++i)
- rc = delkey(delkey_copy, *id, indexes[i].key);
+ tablist_t *indexes = getkeys(delkey_copy, *id, NULL, 0);
+ for (int i = 0; indexes[0].tab[i].flag; ++i)
+ rc = delkey(delkey_copy, *id, indexes[0].tab[i].key);
free(indexes);
}
mtx_unlock(&delkey_mtx);
@@ -172,9 +172,9 @@ static tablist_t *copytab(tablist_t *dst, tablist_t *src)
static void dellist(tablist_t *list)
{
for (int i = 0; i < list[0].len; ++i) {
- tabidx_t *indexes = getkeys(list, i, NULL, 0);
- for (int j = 0; indexes[j].flag; ++j)
- delkey(list, i, indexes[j].key);
+ tablist_t *indexes = getkeys(list, i, NULL, 0);
+ for (int j = 0; indexes[0].tab[j].flag; ++j)
+ delkey(list, i, indexes[0].tab[j].key);
free(indexes);
}
}
diff --git a/src/lib/file.c b/src/lib/file.c
index 0204e4e..8b0c715 100644
--- a/src/lib/file.c
+++ b/src/lib/file.c
@@ -59,19 +59,19 @@ void writedb(char *filename, tablist_t *list)
return;
for (int i = 0; i < list[0].len; ++i) {
fputc(0xFB, fp);
- tabidx_t *indexes = getkeys(list, i, NULL, 0);
- for (int j = 0; indexes[j].flag; ++j) {
- fprintf(fp, "\xfa%s:", indexes[j].key);
- switch (indexes[j].flag) {
+ tablist_t *indexes = getkeys(list, i, NULL, 0);
+ for (int j = 0; indexes[0].tab[j].flag; ++j) {
+ fprintf(fp, "\xfa%s:", indexes[0].tab[j].key);
+ switch (indexes[0].tab[j].flag) {
case 1:
- fprintf(fp, "%.2lf\xfc", indexes[j].value.num);
+ fprintf(fp, "%.2lf\xfc", indexes[0].tab[j].value.num);
break;
case 2:
- fprintf(fp, "%s\xfc", indexes[j].value.boolean ?
+ fprintf(fp, "%s\xfc", indexes[0].tab[j].value.boolean ?
"true" : "false");
break;
case 3:
- fprintf(fp, "%s\xfc", indexes[j].value.str);
+ fprintf(fp, "%s\xfc", indexes[0].tab[j].value.str);
break;
}
}
diff --git a/src/lib/getkeys.c b/src/lib/getkeys.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/lib/getkeys.c
diff --git a/src/lib/keytab.c b/src/lib/keytab.c
index 425b0e1..146937c 100644
--- a/src/lib/keytab.c
+++ b/src/lib/keytab.c
@@ -8,33 +8,35 @@ static int hash(char *key);
static char **getkv(char *pair);
// getkeys - gets every single key in a key table
-tabidx_t *getkeys(tablist_t *list, int id, char **keys, int klen)
+tablist_t *getkeys(tablist_t *list, int id, char **keys, int klen)
{
- int len = 1;
- if (id >= list[0].len)
+ if (id >= list[0].len || id < -1)
return NULL;
- tabidx_t *indexes = calloc(len, sizeof(tabidx_t));
- if (klen == 0) {
- for (int i = 0, j = 0; i < TABLEN; ++i) {
- if (j >= len) {
- indexes = realloc(indexes, ++len * sizeof(tabidx_t));
- indexes[len - 1] = (tabidx_t) { NULL, 0, { 0 } };
+ int rc = 0;
+ int len = id == -1 ? list[0].len : 1;
+ tablist_t *indexes = calloc(len, sizeof(tablist_t));
+ indexes[0].len = len;
+ if (id >= 0) {
+ if (klen == 0) {
+ for (int i = 0, j = 0; i < TABLEN; ++i) {
+ if (list[id].tab[i].flag)
+ indexes[0].tab[j++] = list[id].tab[i];
}
- if (list[id].tab[i].flag)
- indexes[j++] = list[id].tab[i];
- }
- } else {
- for (int i = 0, j = 0; i < klen; ++i) {
- tabidx_t idx = getkey(list, id, keys[i]);
- if (idx.flag == 0)
- return NULL;
- if (j >= len) {
- indexes = realloc(indexes, ++len * sizeof(tabidx_t));
+ } else {
+ for (int i = 0, j = 0; i < klen; ++i) {
+ tabidx_t idx = getkey(list, id, keys[i]);
+ if (idx.flag == 0)
+ rc = 1;
+ indexes[0].tab[j++] = idx;
}
- indexes[j++] = idx;
}
}
- return indexes;
+ if (!rc) {
+ return indexes;
+ } else {
+ free(indexes);
+ return NULL;
+ }
}
// getkey - gets a single key from a keytable
diff --git a/src/lib/mdb.h b/src/lib/mdb.h
index 9038aef..f1284b7 100644
--- a/src/lib/mdb.h
+++ b/src/lib/mdb.h
@@ -23,7 +23,7 @@ typedef struct {
tabidx_t getkey(tablist_t *list, int id, char *key);
// Batch Operations
-tabidx_t *getkeys(tablist_t *list, int id, char **keys, int len); // TODO: Reimplement getkeys
+tablist_t *getkeys(tablist_t *list, int id, char **keys, int len); // TODO: Reimplement getkeys
int setkeys(tablist_t **list, int id, char **pairs, int len);
int delkeys(tablist_t *list, int id, char **keys, int len);