diff options
Diffstat (limited to 'util/libreboot-utils/lib')
| -rw-r--r-- | util/libreboot-utils/lib/rand.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/util/libreboot-utils/lib/rand.c b/util/libreboot-utils/lib/rand.c index e67b7058..d54d4adc 100644 --- a/util/libreboot-utils/lib/rand.c +++ b/util/libreboot-utils/lib/rand.c @@ -29,6 +29,7 @@ #include <unistd.h> #include <stdlib.h> #include <string.h> +#include <stdint.h> #include "../include/common.h" @@ -67,6 +68,30 @@ * or your program dies. */ +char * +mkrstr(size_t n) /* emulates spkmodem-decode */ +{ + char *s; + size_t i; + + if (n == 0) + err_no_cleanup(0, EPERM, "mkrbuf: zero-byte request"); + + if (n == SIZE_MAX) + err_no_cleanup(0, EOVERFLOW, "mkrbuf: overflow"); + + if (if_err((s = mkrbuf(n + 1)) == NULL, EFAULT)) + err_no_cleanup(0, EFAULT, "mkrstr: null"); + + for (i = 0; i < n; i++) + while(*(s + i) == '\0') + rset(s + i, 1); + + *(s + n) = '\0'; + + return s; +} + void * mkrbuf(size_t n) { |
