summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util/libreboot-utils/include/common.h1
-rw-r--r--util/libreboot-utils/lib/rand.c10
-rw-r--r--util/libreboot-utils/lottery.c13
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;
}/*