diff --git a/libmaxsi/Makefile b/libmaxsi/Makefile
index 51e7775d..b96dad6c 100644
--- a/libmaxsi/Makefile
+++ b/libmaxsi/Makefile
@@ -76,6 +76,7 @@ memory.o \
readparamstring.o \
rewind.o \
sort.o \
+sprint.o \
sscanf.o \
stpcpy.o \
strcasecmp.o \
diff --git a/libmaxsi/print.cpp b/libmaxsi/print.cpp
index 1fd177de..b15290d5 100644
--- a/libmaxsi/print.cpp
+++ b/libmaxsi/print.cpp
@@ -62,60 +62,3 @@ extern "C" int printf(const char* /*restrict*/ format, ...)
va_end(list);
return (int) result;
}
-
-typedef struct vsnprintf_struct
-{
- char* str;
- size_t size;
- size_t produced;
- size_t written;
-} vsnprintf_t;
-
-static size_t StringPrintCallback(void* user, const char* string, size_t stringlen)
-{
- vsnprintf_t* info = (vsnprintf_t*) user;
- if ( info->produced < info->size )
- {
- size_t available = info->size - info->produced;
- size_t possible = (stringlen < available) ? stringlen : available;
- memcpy(info->str + info->produced, string, possible);
- info->written += possible;
- }
- info->produced += stringlen;
- return stringlen;
-}
-
-extern "C" int vsnprintf(char* restrict str, size_t size, const char* restrict format, va_list list)
-{
- vsnprintf_t info;
- info.str = str;
- info.size = (size) ? size-1 : 0;
- info.produced = 0;
- info.written = 0;
- vprintf_callback(StringPrintCallback, &info, format, list);
- if ( size ) { info.str[info.written] = '\0'; }
- return (int) info.produced;
-}
-
-extern "C" int snprintf(char* restrict str, size_t size, const char* restrict format, ...)
-{
- va_list list;
- va_start(list, format);
- int result = vsnprintf(str, size, format, list);
- va_end(list);
- return result;
-}
-
-extern "C" int vsprintf(char* restrict str, const char* restrict format, va_list list)
-{
- return vsnprintf(str, SIZE_MAX, format, list);
-}
-
-extern "C" int sprintf(char* restrict str, const char* restrict format, ...)
-{
- va_list list;
- va_start(list, format);
- int result = vsprintf(str, format, list);
- va_end(list);
- return result;
-}
diff --git a/libmaxsi/sprint.cpp b/libmaxsi/sprint.cpp
new file mode 100644
index 00000000..3c9ebcd6
--- /dev/null
+++ b/libmaxsi/sprint.cpp
@@ -0,0 +1,86 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ sprint.cpp
+ Provides the stubs for the sprintf family of functions.
+
+*******************************************************************************/
+
+#include
+#include
+#include
+#include
+#include
+
+typedef struct vsnprintf_struct
+{
+ char* str;
+ size_t size;
+ size_t produced;
+ size_t written;
+} vsnprintf_t;
+
+static size_t StringPrintCallback(void* user, const char* string, size_t stringlen)
+{
+ vsnprintf_t* info = (vsnprintf_t*) user;
+ if ( info->produced < info->size )
+ {
+ size_t available = info->size - info->produced;
+ size_t possible = (stringlen < available) ? stringlen : available;
+ memcpy(info->str + info->produced, string, possible);
+ info->written += possible;
+ }
+ info->produced += stringlen;
+ return stringlen;
+}
+
+extern "C" int vsnprintf(char* restrict str, size_t size, const char* restrict format, va_list list)
+{
+ vsnprintf_t info;
+ info.str = str;
+ info.size = (size) ? size-1 : 0;
+ info.produced = 0;
+ info.written = 0;
+ vprintf_callback(StringPrintCallback, &info, format, list);
+ if ( size ) { info.str[info.written] = '\0'; }
+ return (int) info.produced;
+}
+
+extern "C" int snprintf(char* restrict str, size_t size, const char* restrict format, ...)
+{
+ va_list list;
+ va_start(list, format);
+ int result = vsnprintf(str, size, format, list);
+ va_end(list);
+ return result;
+}
+
+extern "C" int vsprintf(char* restrict str, const char* restrict format, va_list list)
+{
+ return vsnprintf(str, SIZE_MAX, format, list);
+}
+
+extern "C" int sprintf(char* restrict str, const char* restrict format, ...)
+{
+ va_list list;
+ va_start(list, format);
+ int result = vsprintf(str, format, list);
+ va_end(list);
+ return result;
+}
diff --git a/sortix/bga.cpp b/sortix/bga.cpp
index f985b379..cecff265 100644
--- a/sortix/bga.cpp
+++ b/sortix/bga.cpp
@@ -31,6 +31,7 @@
#include
#include
#include
+#include
#include
#include
#include "x86-family/memorymanagement.h"
@@ -423,9 +424,9 @@ bool BGADriver::DetectModes() const
char bppstr[64];
char xresstr[64];
char yresstr[64];
- bppstr[String::ConvertUInt32(bpp, bppstr)] = 0;
- xresstr[String::ConvertUInt32(w, xresstr)] = 0;
- yresstr[String::ConvertUInt32(h, yresstr)] = 0;
+ snprintf(bppstr, 64, "%u", bpp);
+ snprintf(xresstr, 64, "%u", w);
+ snprintf(yresstr, 64, "%u", h);
char* modestr = String::Combine(6, "width=", xresstr, ",height=",
yresstr, ",bpp=", bppstr);
if ( !modestr ) { return false; }