diff options
Diffstat (limited to 'cmd/cmd_rand_libc.c')
-rw-r--r-- | cmd/cmd_rand_libc.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/cmd/cmd_rand_libc.c b/cmd/cmd_rand_libc.c new file mode 100644 index 0000000..d72bc45 --- /dev/null +++ b/cmd/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; +} |