summaryrefslogtreecommitdiffstats
path: root/nserver/src/ncmd.c
diff options
context:
space:
mode:
authorrsiddharth <s@ricketyspace.net>2019-12-09 19:05:07 -0500
committerrsiddharth <s@ricketyspace.net>2020-04-17 20:56:35 -0400
commit76c8c714cdf91c1841ab2a50e2bc2de5399aa820 (patch)
tree15ba19a677bf129761416f3cae30ded3162bba80 /nserver/src/ncmd.c
parent17cdf409917335a299e70d03973aea05ded781e3 (diff)
nserver: Update call_function.
* nserver/src/ncmd.c (call_function): Dynmically allocate space for msg. * nserver/tests/ncmd_tests.c (test_call_function): Updat test.
Diffstat (limited to 'nserver/src/ncmd.c')
-rw-r--r--nserver/src/ncmd.c65
1 files changed, 38 insertions, 27 deletions
diff --git a/nserver/src/ncmd.c b/nserver/src/ncmd.c
index 5c222ce..a72dc2e 100644
--- a/nserver/src/ncmd.c
+++ b/nserver/src/ncmd.c
@@ -156,105 +156,116 @@ int check_args(struct bstrList *cmd_parts, int argc)
return -1;
}
-/**
- * TODO:
- * - msg needs to be dynamically allocated.
- * - error msgs need to be consistent.
- */
char *call_function(int func, struct bstrList *cmd_parts)
{
char *msg = NULL;
+ int msg_sz = 200;
+ msg = (char *) calloc(msg_sz + 1, sizeof(char));
+ check_mem(msg);
+
if (func < 0 || cmd_parts == NULL || cmd_parts->qty < 1) {
- msg = "function call failed: internal error";
+ strncpy(msg, "error: args invalid\n", msg_sz);
return msg;
}
- int rc = 0;
switch (func) {
case NS_CREATE:
if(check_args(cmd_parts, 2) != 0) {
- msg = "create failed: command invalid\n";
+ strncpy(msg, "error: command invalid\n", msg_sz);
break;
}
if (sscreate(bdata(cmd_parts->entry[1])) != 0) {
- msg = "create failed: internal error";
+ strncpy(msg, "error: create failed\n", msg_sz);
break;
}
- msg = "OK\n";
+ strncpy(msg, "OK\n", msg_sz);
break;
case NS_SAMPLE:
if(check_args(cmd_parts, 3) != 0) {
- msg = "sample failed: command invalid\n";
+ strncpy(msg, "error: command invalid\n", msg_sz);
break;
}
double sample = strtod(bdata(cmd_parts->entry[2]), NULL);
if (sssample(bdata(cmd_parts->entry[1]), sample) != 0) {
- msg = "sample failed: internal error";
+ strncpy(msg, "error: sample failed\n", msg_sz);
break;
}
- msg = "OK\n";
+ strncpy(msg, "OK\n", msg_sz);
break;
case NS_MEAN:
if(check_args(cmd_parts, 2) != 0) {
- msg = "mean failed: command invalid\n";
+ strncpy(msg, "error: command invalid\n", msg_sz);
break;
}
double mean = ssmean(bdata(cmd_parts->entry[1]));
if (mean < 0) {
- msg = "mean failed: internal error";
+ strncpy(msg, "error: mean failed\n", msg_sz);
break;
}
- msg = (char *) calloc(20, sizeof(char));
if (sprintf(msg, "Mean: %.2f\n", mean) < 0) {
- msg = "mean failed: internal error";
+ strncpy(msg, "error: mean failed\n", msg_sz);
}
break;
case NS_DUMP:
if(check_args(cmd_parts, 2) != 0) {
- msg = "dump failed: command invalid\n";
+ strncpy(msg, "error: command invalid\n", msg_sz);
break;
}
char *dump = ssdump(bdata(cmd_parts->entry[1]));
if (dump == NULL) {
- msg = "dump failed: internal error";
+ strncpy(msg, "error: dump failed\n", msg_sz);
break;
}
+
+ // Clean up msg.
+ free(msg);
+
msg = dump;
break;
case NS_DELETE:
if(check_args(cmd_parts, 2) != 0) {
- msg = "delete failed: command invalid\n";
+ strncpy(msg, "error: command invalid\n", msg_sz);
break;
}
if (ssdelete(bdata(cmd_parts->entry[1])) != 0) {
- msg = "delete failed: internal error";
+ strncpy(msg, "error: delete failed\n", msg_sz);
break;
}
- msg = "OK\n";
+ strncpy(msg, "OK\n", msg_sz);
break;
case NS_LIST:
if(check_args(cmd_parts, 1) != 0) {
- msg = "list failed: command invalid\n";
+ strncpy(msg, "error: command invalid\n", msg_sz);
break;
}
- msg = sslist();
- if (msg == NULL) {
- msg = "list failed: internal error";
+ char *list = sslist();
+ if (list == NULL) {
+ strncpy(msg, "error: list failed\n", msg_sz);
+ break;
}
+
+ // Clean up msg.
+ free(msg);
+
+ msg = list;
break;
default:
- msg = "error: function not found";
+ strncpy(msg, "error: function not found\n", msg_sz);
break;
}
return msg;
+ error:
+ return NULL;
+}
+
}