summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrsiddharth <s@ricketyspace.net>2020-02-17 19:51:10 -0500
committerrsiddharth <s@ricketyspace.net>2020-04-17 20:56:36 -0400
commit09339f341bd467f3f44458bd130c301fe7ccce4a (patch)
treee8297b45d2fcbb7be5b314694336304d0a0a10f9
parent3052fc1c4621357b91ae61b09b8e4aafa41b4f47 (diff)
nserver: Refactor sslist.
* nserver/src/protocol.c (sslist): Refactor sslist to use TSTree. * nserver/tests/protocol_tests.c (test_sslist): Update test.
-rw-r--r--nserver/src/protocol.c51
-rw-r--r--nserver/tests/protocol_tests.c8
2 files changed, 29 insertions, 30 deletions
diff --git a/nserver/src/protocol.c b/nserver/src/protocol.c
index 205d994..5d72b16 100644
--- a/nserver/src/protocol.c
+++ b/nserver/src/protocol.c
@@ -161,43 +161,42 @@ char *ssdump(char *key)
return NULL;
}
-char *sslist()
+// meant to be used by sslist.
+void traverse_tree(void *value, void *data)
{
- DArray *ks = NULL;
+ Record *rec = (Record *) value;
+ bstring bstr = (bstring) data;
- check(hash != NULL, "hash not initiliazed");
+ check(rec != NULL, "Record is NULL");
+ check(bstr != NULL, "bstr is NULL");
+ check(rec->key != NULL, "Record's key is NULL");
+ check(blength(rec->key) > 0, "Record's key is an empty string");
- // 1. Get keys.
- ks = Hashmap_keys(hash);
- check(ks != NULL, "error getting keys");
+ int rc = bconcat(bstr, rec->key);
+ check(rc == BSTR_OK, "bstr key concat failed");
- bstring ks_str = bfromcstr("");
- check(ks_str != NULL, "error creating keys_str");
+ rc = bconchar(bstr, '\n');
+ check(rc == BSTR_OK, "bstr newline concat failed");
- int i, rc;
- bstring k = NULL;
- for (i = 0; i < DArray_count(ks); ++i) {
- k = (bstring) DArray_get(ks, i);
- check(k != NULL, "k at %d", i);
+ error:
+ return;
+}
- rc = bconcat(ks_str, k);
- check(rc == BSTR_OK, "bstr key concat failed");
- rc = bconchar(ks_str, '\n');
- check(rc == BSTR_OK, "bstr newline concat failed");
- }
+char *sslist()
+{
+ check(tst != NULL, "tstree not initialized");
+
+ // 1. Create "accumulator" string.
+ bstring ks_str = bfromcstr("");
+ check(ks_str != NULL, "error creating keys_str");
- // cleanup.
- DArray_destroy(ks);
+ // 2. Accumulate keys into "accumulator" string.
+ TSTree_traverse(tst, traverse_tree, ks_str);
+ // 3. Return result.
return bstr2cstr(ks_str, ' ');
error:
-
- // cleanup
- if (ks) {
- DArray_destroy(ks);
- }
-
return NULL;
}
diff --git a/nserver/tests/protocol_tests.c b/nserver/tests/protocol_tests.c
index ab50f9b..dbf3625 100644
--- a/nserver/tests/protocol_tests.c
+++ b/nserver/tests/protocol_tests.c
@@ -102,9 +102,9 @@ char *test_sslist()
{
char *ks = sslist();
mu_assert(ks != NULL, "sslist failed");
- mu_assert(strlen(ks) == 19, "length check failed");
+ mu_assert(strlen(ks) == 33, "length check failed");
- debug("KEYS:\n %s", ks);
+ debug("KEYS:\n%s", ks);
return NULL;
}
@@ -133,8 +133,8 @@ char *all_tests()
mu_run_test(test_sssample);
mu_run_test(test_ssmean);
mu_run_test(test_ssdump);
- /*mu_run_test(test_sslist);
- mu_run_test(test_ssdelete);*/
+ mu_run_test(test_sslist);
+ /*mu_run_test(test_ssdelete);*/
return NULL;
}