diff --git a/AK/printf.cpp b/AK/printf.cpp index 31803c9796..68d29e5dc6 100644 --- a/AK/printf.cpp +++ b/AK/printf.cpp @@ -248,10 +248,12 @@ one_more: ret += print_hex(putch, bufptr, va_arg(ap, qword), 16); break; +#ifndef KERNEL case 'f': // FIXME: Print as float! ret += print_number(putch, bufptr, (int)va_arg(ap, double), leftPad, zeroPad, fieldWidth); break; +#endif case 'o': if (alternate_form) { diff --git a/Kernel/Devices/RandomDevice.cpp b/Kernel/Devices/RandomDevice.cpp index b09a0b63c5..25d9159dd2 100644 --- a/Kernel/Devices/RandomDevice.cpp +++ b/Kernel/Devices/RandomDevice.cpp @@ -10,20 +10,13 @@ RandomDevice::~RandomDevice() { } -// Simple rand() and srand() borrowed from the POSIX standard: +static dword next = 1; -static unsigned long next = 1; - -#define MY_RAND_MAX 32767 -int RandomDevice::random_value() +#define MY_RAND_MAX 4294967295U +dword RandomDevice::random_value() { next = next * 1103515245 + 12345; - return((unsigned)(next/((MY_RAND_MAX + 1) * 2)) % (MY_RAND_MAX + 1)); -} - -float RandomDevice::random_percentage() -{ - return (float)random_value() / (float)MY_RAND_MAX; + return next; } #if 0 diff --git a/Kernel/Devices/RandomDevice.h b/Kernel/Devices/RandomDevice.h index 9983d1fdc3..7de52f0d82 100644 --- a/Kernel/Devices/RandomDevice.h +++ b/Kernel/Devices/RandomDevice.h @@ -8,8 +8,7 @@ public: RandomDevice(); virtual ~RandomDevice() override; - static int random_value(); - static float random_percentage(); + static dword random_value(); private: // ^CharacterDevice diff --git a/Kernel/Makefile b/Kernel/Makefile index 6ef0396872..d756e2e5f4 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -80,7 +80,7 @@ CXX_OBJS = $(KERNEL_OBJS) $(VFS_OBJS) $(AK_OBJS) OBJS = $(CXX_OBJS) Boot/boot.ao KERNEL = kernel -CXXFLAGS += -ffreestanding -mregparm=3 +CXXFLAGS += -ffreestanding -mregparm=3 -mno-80387 -mno-mmx -mno-sse -mno-sse2 DEFINES += -DKERNEL LD = i686-pc-serenity-ld LDFLAGS += -T linker.ld diff --git a/Kernel/Net/TCPSocket.cpp b/Kernel/Net/TCPSocket.cpp index 373ee08979..40819d556f 100644 --- a/Kernel/Net/TCPSocket.cpp +++ b/Kernel/Net/TCPSocket.cpp @@ -181,7 +181,7 @@ int TCPSocket::protocol_allocate_source_port() static const word first_ephemeral_port = 32768; static const word last_ephemeral_port = 60999; static const word ephemeral_port_range_size = last_ephemeral_port - first_ephemeral_port; - word first_scan_port = first_ephemeral_port + (word)(RandomDevice::random_percentage() * ephemeral_port_range_size); + word first_scan_port = first_ephemeral_port + RandomDevice::random_value() % ephemeral_port_range_size; LOCKER(sockets_by_port().lock()); for (word port = first_scan_port;;) { diff --git a/Kernel/Net/UDPSocket.cpp b/Kernel/Net/UDPSocket.cpp index 96c9a320ea..6bf5d112e3 100644 --- a/Kernel/Net/UDPSocket.cpp +++ b/Kernel/Net/UDPSocket.cpp @@ -91,7 +91,7 @@ int UDPSocket::protocol_allocate_source_port() static const word first_ephemeral_port = 32768; static const word last_ephemeral_port = 60999; static const word ephemeral_port_range_size = last_ephemeral_port - first_ephemeral_port; - word first_scan_port = first_ephemeral_port + (word)(RandomDevice::random_percentage() * ephemeral_port_range_size); + word first_scan_port = first_ephemeral_port + RandomDevice::random_value() % ephemeral_port_range_size; LOCKER(sockets_by_port().lock()); for (word port = first_scan_port;;) {