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; }