forked from Bananymous/banan-os
LibC: printf string persision works now
This commit is contained in:
parent
a4cb5d8360
commit
4f84faf392
|
@ -3,7 +3,6 @@
|
|||
#include <bits/printf.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
|
@ -199,7 +198,7 @@ static void floating_point_to_exponent_string(char* buffer, T value, bool upper,
|
|||
int exponent = 0;
|
||||
if (value != (T)0.0)
|
||||
{
|
||||
exponent = (int)floorl(BAN::Math::log10<T>(value));
|
||||
exponent = (int)BAN::Math::log10<T>(value);
|
||||
value /= BAN::Math::pow<T>(10.0, exponent);
|
||||
}
|
||||
|
||||
|
@ -287,6 +286,7 @@ extern "C" int printf_impl(const char* format, va_list arguments, int (*putc_fun
|
|||
else if (*format == '*')
|
||||
{
|
||||
percision = va_arg(arguments, int);
|
||||
format++;
|
||||
}
|
||||
if (percision < 0)
|
||||
percision = -1;
|
||||
|
@ -295,9 +295,11 @@ extern "C" int printf_impl(const char* format, va_list arguments, int (*putc_fun
|
|||
|
||||
// TODO: Lenght modifier
|
||||
|
||||
static char conversion[1024];
|
||||
|
||||
char conversion[1024];
|
||||
const char* string = nullptr;
|
||||
|
||||
int length = -1;
|
||||
|
||||
switch (*format)
|
||||
{
|
||||
case 'd':
|
||||
|
@ -371,6 +373,12 @@ extern "C" int printf_impl(const char* format, va_list arguments, int (*putc_fun
|
|||
case 's':
|
||||
{
|
||||
string = va_arg(arguments, const char*);
|
||||
if (options.percision != -1)
|
||||
{
|
||||
length = 0;
|
||||
while (string[length] && length < options.percision)
|
||||
length++;
|
||||
}
|
||||
format++;
|
||||
break;
|
||||
}
|
||||
|
@ -420,23 +428,21 @@ extern "C" int printf_impl(const char* format, va_list arguments, int (*putc_fun
|
|||
|
||||
if (string)
|
||||
{
|
||||
int len = strlen(string);
|
||||
if (length == -1)
|
||||
length = strlen(string);
|
||||
|
||||
if (options.width == -1)
|
||||
options.width = 0;
|
||||
|
||||
if (!options.left_justified)
|
||||
for (int i = len; i < options.width; i++)
|
||||
for (int i = length; i < options.width; i++)
|
||||
BAN_PRINTF_PUTC(' ');
|
||||
|
||||
while (*string)
|
||||
{
|
||||
BAN_PRINTF_PUTC(*string);
|
||||
string++;
|
||||
}
|
||||
for (int i = 0; i < length && string[i]; i++)
|
||||
BAN_PRINTF_PUTC(string[i]);
|
||||
|
||||
if (options.left_justified)
|
||||
for (int i = len; i < options.width; i++)
|
||||
for (int i = length; i < options.width; i++)
|
||||
BAN_PRINTF_PUTC(' ');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue