Browse Source

fixed libc and sprintf

master
Mathieu Sérandour 2 years ago
parent
commit
99b4d9e2e5
  1. 9
      kernel/klib/sprintf.c
  2. 2
      kernel/klib/sprintf.h
  3. 4
      kernel/klib/string.c

9
kernel/klib/sprintf.c

@ -1,5 +1,6 @@
#include "sprintf.h"
#include "string.h"
#include "../video/terminal.h"
#define SIGN(X) X > 0 ? 1 : -1
#define ARG(TYPE) (TYPE)va_arg(ap, TYPE)
@ -174,18 +175,14 @@ int sprintf(char* str, const char* format, ...) {
//
//}
static void (*print_fun)(const char *string, size_t length) = NULL;
void set_print_fun(void* fun) {
print_fun = fun;
}
int kprintf(const char* format, ...) {
va_list ap;
int ret;
va_start(ap, format);
terminal_handler_t print_fun = get_terminal_handler();
if(!print_fun)
ret = -1;
else {

2
kernel/klib/sprintf.h

@ -12,8 +12,6 @@ int snprintf(char *str, size_t size, const char *format, ...);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
void set_print_fun(void* fun);
int kprintf(const char* format, ...);
#endif

4
kernel/klib/string.c

@ -210,7 +210,8 @@ int memcmp (const void* _buf1, const void* _buf2, size_t n) {
void * memcpy (void * _dest, const void *_src, size_t n) {
uint8_t* src=_src,*dest=_dest;
const uint8_t* src=_src;
uint8_t* dest=_dest;
for(;n > 0; --n)
*(dest++) = *(src++);
@ -232,6 +233,7 @@ void * memset (void * _buf, int _ch, size_t n) {
if(n >= 8) {
uint64_t ch64 = ch | (ch << 8);
ch64 = ch64 | (ch64 << 16);
ch64 = ch64 | (ch64 << 32);
for(;n > 0; n -= 8) {
*(uint64_t*)buf = ch64;

Loading…
Cancel
Save