diff options
author | Vivien Kraus <vivien@planete-kraus.eu> | 2020-01-01 00:00:00 +0100 |
---|---|---|
committer | Vivien Kraus <vivien@planete-kraus.eu> | 2021-06-19 15:44:24 +0200 |
commit | c54ad2f70f705a62946fb93902f9a9bd65ae1fed (patch) | |
tree | 672a7c71542425cb5694cf349c366e9d4f4745be /src/random/generate-random.c | |
parent | 7c81a49d762e67b21c99a95b86d1e7886d91de02 (diff) |
Add a random number generator.
Diffstat (limited to 'src/random/generate-random.c')
-rw-r--r-- | src/random/generate-random.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/random/generate-random.c b/src/random/generate-random.c new file mode 100644 index 0000000..bde01b9 --- /dev/null +++ b/src/random/generate-random.c @@ -0,0 +1,42 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif /* HAVE_CONFIG_H */ + +#include <stdio.h> +#include <stdlib.h> +#include <libguile.h> +#include <gettext.h> + +#define _(s) gettext (s) + +SCM webidoidc_random_g (SCM length); + +int init_webidoidc_random (void); + +static void +run (void *params, int argc, char *argv[]) +{ + size_t n_bytes; + char *end; + SCM data; + (void) params; + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + if (argc != 2 + || (n_bytes = strtoull (argv[1], &end, 10)) == 0 || *end != '\0') + { + fprintf (stderr, _("Usage: generate-random [NUMBER OF BYTES]\n")); + exit (1); + } + init_webidoidc_random (); + data = webidoidc_random_g (scm_from_size_t (n_bytes)); + printf ("%s\n", scm_to_locale_string (data)); +} + +int +main (int argc, char *argv[]) +{ + scm_boot_guile (argc, argv, run, NULL); + return 0; +} |