diff options
author | Marvin Borner | 2021-04-25 13:43:14 +0200 |
---|---|---|
committer | Marvin Borner | 2021-04-25 13:43:14 +0200 |
commit | f2b4acb2fe6a366288b19843e0d2678b8590bdf4 (patch) | |
tree | 1eb869f237908ec0b2516c00f940c6562c5cc5bd /libs/libc/random.c | |
parent | cd46cefdd74b9ad0b225706f4d4b5864e87d97d6 (diff) |
Chu chuu, using the bus for everything now!
Well, I know: bus != train. But I like trains. So I don't care.
Go away!
Diffstat (limited to 'libs/libc/random.c')
-rw-r--r-- | libs/libc/random.c | 80 |
1 files changed, 0 insertions, 80 deletions
diff --git a/libs/libc/random.c b/libs/libc/random.c deleted file mode 100644 index 268a21f..0000000 --- a/libs/libc/random.c +++ /dev/null @@ -1,80 +0,0 @@ -// MIT License, Copyright (c) 2020 Marvin Borner - -#include <def.h> -#include <mem.h> -#include <rand.h> - -#ifdef KERNEL -#include <cpu.h> -#endif - -static u32 g_seed = 1; - -void srand(u32 seed) -{ - g_seed = seed; -} - -static u32 rand_default(void) -{ - g_seed = g_seed * 1103515245 + 12345; - return (g_seed >> 16) & 0x7FFF; -} - -static u32 rand_once(void) -{ -#ifdef KERNEL - u32 val = 0; - if (cpu_extended_features.ebx & CPUID_EXT_FEAT_EBX_RDSEED) { - __asm__ volatile("1:\n" - "rdseed %0\n" - "jnc 1b\n" - : "=r"(val)); - } else if (cpu_features.ecx & CPUID_FEAT_ECX_RDRND) { - __asm__ volatile("1:\n" - "rdrand %0\n" - "jnc 1b\n" - : "=r"(val)); - } else { - val = rand_default(); - } - - return val; -#else - return rand_default(); -#endif -} - -u32 rand(void) -{ - u32 ret = 0; - ret |= (rand_once() & (0xffu << 0)); - ret |= (rand_once() & (0xffu << 8)); - ret |= (rand_once() & (0xffu << 16)); - ret |= (rand_once() & (0xffu << 24)); - return ret; -} - -void rand_fill(void *buf, u32 size) -{ - for (u32 i = 0; i < size; i++) - ((u8 *)buf)[i] = rand_once() & 0xff; -} - -char *randstr(u32 size) -{ - if (!size) - return NULL; - - char *buf = malloc(size + 1); - const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - - size--; - for (u32 i = 0; i < size; i++) { - int key = rand() % (sizeof(charset) - 1); - buf[i] = charset[key]; - } - buf[size] = '\0'; - - return buf; -} |