diff options
Diffstat (limited to 'util/libreboot-utils')
| -rw-r--r-- | util/libreboot-utils/include/common.h | 1 | ||||
| -rw-r--r-- | util/libreboot-utils/lib/rand.c | 10 | ||||
| -rw-r--r-- | util/libreboot-utils/lottery.c | 13 |
3 files changed, 24 insertions, 0 deletions
diff --git a/util/libreboot-utils/include/common.h b/util/libreboot-utils/include/common.h index 4668cffa..ebad01bf 100644 --- a/util/libreboot-utils/include/common.h +++ b/util/libreboot-utils/include/common.h @@ -385,6 +385,7 @@ int dcat(const char *s, size_t n, unsigned short hextonum(char ch_s); void *mkrbuf(size_t n); +void *rmalloc(size_t *size); /* don't ever use this */ void rset(void *buf, size_t n); void *mkrbuf(size_t n); char *mkrstr(size_t n); diff --git a/util/libreboot-utils/lib/rand.c b/util/libreboot-utils/lib/rand.c index 29a756ed..6fb25d9d 100644 --- a/util/libreboot-utils/lib/rand.c +++ b/util/libreboot-utils/lib/rand.c @@ -71,6 +71,16 @@ #define ELOTTERY ECANCELED +void * +rmalloc(size_t *rval) +{ + if (if_err(rval == NULL, EFAULT)) + return NULL; + + rset(rval, sizeof(*rval)); + return mkrstr(*rval %= BUFSIZ); +} + int win_lottery(void) { diff --git a/util/libreboot-utils/lottery.c b/util/libreboot-utils/lottery.c index f673a109..6c151add 100644 --- a/util/libreboot-utils/lottery.c +++ b/util/libreboot-utils/lottery.c @@ -7,11 +7,15 @@ #endif #include <stdio.h> +#include <stdlib.h> #include "include/common.h" int main(int argc, char *argv[]) { + size_t s; + char *s1; + #if defined(__OpenBSD__) && defined(OpenBSD) #if (OpenBSD) >= 509 if (pledge("stdio", NULL) == -1) @@ -19,11 +23,20 @@ main(int argc, char *argv[]) #endif #endif + setvbuf(stdout, NULL, _IONBF, 0); + if (win_lottery()) { printf("You won!"); return 0; } + s1 = rmalloc(&s); + + if (s1 != NULL) { + printf("%s\n\nYou lose. Sorry!\n", s1); + free(s1); + } + return 1; }/* |
