Add: calloc

This commit is contained in:
xamidev
2024-09-27 20:03:24 +02:00
parent 1085222d98
commit 8a68cf3b30
8 changed files with 28 additions and 6 deletions

View File

@@ -18,13 +18,13 @@ void putpixel(uint32_t* fb, int pitch, int bpp, int x, int y, uint32_t color)
void draw_char(unsigned short int c, int cx, int cy, uint32_t fg, uint32_t bg)
{
PSF_font *font = (PSF_font*)&_binary_include_fonts_UniCyr_8x16_psf_start;
PSF_font *font = (PSF_font*)&_binary_include_fonts_UniCyrExt_8x16_psf_start;
int bytesperline=(font->width+7)/8;
if (unicode != NULL) {
c = unicode[c];
}
unsigned char* glyph = (unsigned char*)&_binary_include_fonts_UniCyr_8x16_psf_start + font->headersize + (c>0&&c<font->numglyph?c:0)*font->bytesperglyph;
unsigned char* glyph = (unsigned char*)&_binary_include_fonts_UniCyrExt_8x16_psf_start + font->headersize + (c>0&&c<font->numglyph?c:0)*font->bytesperglyph;
int offs =
(cy * font->height * scanline) +
@@ -54,7 +54,7 @@ void scroll()
{
serial_printf(3, "Scrolling...\r");
uint32_t bg_color = 0x00000000;
PSF_font *font = (PSF_font*)&_binary_include_fonts_UniCyr_8x16_psf_start;
PSF_font *font = (PSF_font*)&_binary_include_fonts_UniCyrExt_8x16_psf_start;
int line_size = font->height * scanline;
int framebuffer_size = scanline * font->height * (1080/font->height);

View File

@@ -9,7 +9,7 @@
#include <stdint.h>
extern int scanline;
extern char _binary_include_fonts_UniCyr_8x16_psf_start;
extern char _binary_include_fonts_UniCyrExt_8x16_psf_start;
uint16_t* unicode;
#define PIXEL uint32_t

View File

@@ -56,6 +56,23 @@ void* malloc(size_t size)
return NULL;
}
void* calloc(size_t num, size_t size)
{
size_t total_size = num*size;
void* ptr = malloc(total_size);
if (ptr != NULL)
{
uint8_t* byte_ptr = (uint8_t*)ptr;
for (size_t i=0; i<total_size; i++)
{
byte_ptr[i] = 0;
}
}
return ptr;
}
void free(void* ptr)
{
if (ptr == NULL) return;

View File

@@ -20,5 +20,6 @@ typedef struct block
void init_alloc();
void* malloc(size_t size);
void free(void* ptr);
void* calloc(size_t num, size_t size);
#endif

View File

@@ -118,6 +118,10 @@ void kmain(multiboot2_info *mb_info)
printf("[debug] malloc test ptr1=0x%x, ptr2=0x%x\n", (unsigned int)ptr1, (unsigned int)ptr2);
free(ptr1); free(ptr2);
void* ptr3 = calloc(1024, 2);
printf("[debug] calloc test ptr3=0x%x\n", (unsigned int)ptr3);
free (ptr3);
// usually the place where i do testing
timer_install();