summaryrefslogtreecommitdiff
path: root/cmd_rand_libc.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmd_rand_libc.c')
-rw-r--r--cmd_rand_libc.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/cmd_rand_libc.c b/cmd_rand_libc.c
new file mode 100644
index 0000000..d72bc45
--- /dev/null
+++ b/cmd_rand_libc.c
@@ -0,0 +1,50 @@
+#include "cmd_rand_libc.h"
+
+
+void *cmd_rand_libc(void *data)
+{
+ char *ret = NULL;
+ int fret=-1;
+
+ const int buf_size = 128;
+ char buf[buf_size+1];
+
+ printf("RAND LIBC\n");
+
+ int i;
+ int count;
+ int rand_val;
+ sds params;
+ sds out_result;
+ sds *tokens;
+
+ if (data == NULL)
+ {
+ rand_val = rand();
+ snprintf(buf, buf_size, "%d", rand_val);
+ } else {
+ //cut output to 512
+ char str_integer[16];
+ int rand_state;
+
+ params = sdsnew(data);
+ out_result = sdsempty();
+ tokens = sdssplitargs(params, &count);
+ for (i=0;i<count;i++)
+ {
+ rand_state = atoi(tokens[i]);
+ snprintf(str_integer, 16, "%d ", rand_r(&rand_state));
+ out_result = sdscat(out_result, str_integer);
+ }
+ out_result = sdscat(out_result,"\n");
+ snprintf(buf, buf_size, "%s", out_result);
+
+ sdsfree(params);
+ sdsfree(out_result);
+ sdsfreesplitres(tokens, count);
+ }
+
+ ret = alloc_new_str(buf);
+
+ return ret;
+}