diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/batch.c | 12 | ||||
-rw-r--r-- | src/lib/file.c | 14 | ||||
-rw-r--r-- | src/lib/getkeys.c | 0 | ||||
-rw-r--r-- | src/lib/keytab.c | 44 | ||||
-rw-r--r-- | src/lib/mdb.h | 2 |
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); |