Browse Source

Kernel: Stop supporting sprintf

The kernel no longer needs sprintf (which might, in theory, overflow),
so we can hide the C++ declaration and make the function uncallable
from within the kernel.

However, libstdc++ still links against it, as libstdc++ uses it for
demangling, from AK::demangle().
Ben Wiederhake 5 years ago
parent
commit
1aad0f8b16
2 changed files with 4 additions and 1 deletions
  1. 4 0
      Kernel/kprintf.cpp
  2. 0 1
      Kernel/kstdio.h

+ 4 - 0
Kernel/kprintf.cpp

@@ -133,6 +133,10 @@ static void buffer_putch(char*& bufptr, char ch)
     *bufptr++ = ch;
     *bufptr++ = ch;
 }
 }
 
 
+// Declare it, so that the symbol is exported, because libstdc++ uses it.
+// However, *only* libstdc++ uses it, and none of the rest of the Kernel.
+extern "C" int sprintf(char* buffer, const char* fmt, ...);
+
 int sprintf(char* buffer, const char* fmt, ...)
 int sprintf(char* buffer, const char* fmt, ...)
 {
 {
     ScopedSpinLock lock(s_log_lock);
     ScopedSpinLock lock(s_log_lock);

+ 0 - 1
Kernel/kstdio.h

@@ -33,7 +33,6 @@ int dbgprintf(const char* fmt, ...);
 int dbgputstr(const char*, int);
 int dbgputstr(const char*, int);
 int kernelputstr(const char*, int);
 int kernelputstr(const char*, int);
 int kprintf(const char* fmt, ...);
 int kprintf(const char* fmt, ...);
-int sprintf(char* buf, const char* fmt, ...);
 int snprintf(char* buf, size_t, const char* fmt, ...);
 int snprintf(char* buf, size_t, const char* fmt, ...);
 void set_serial_debug(bool on_or_off);
 void set_serial_debug(bool on_or_off);
 int get_serial_debug();
 int get_serial_debug();