mirror of
https://github.com/0Nera/BMOSP.git
synced 2024-12-22 14:02:34 +03:00
Добавлены буферы ввода-вывода
This commit is contained in:
parent
37269c9fba
commit
471ee3cde3
2
TODO.md
2
TODO.md
@ -8,7 +8,7 @@
|
||||
- [x] Менеджер видеопамяти
|
||||
- [ ] Менеджер потоков
|
||||
- [x] Загрузчик модулей
|
||||
- [ ] Буферы ввода-вывода
|
||||
- [X] Буфер ввода-вывода
|
||||
|
||||
Модули:
|
||||
|
||||
|
26
include/io_buf.h
Normal file
26
include/io_buf.h
Normal file
@ -0,0 +1,26 @@
|
||||
/**
|
||||
* io_buf.h
|
||||
* Заголовок с определениями функций буфера ввода-вывода
|
||||
*
|
||||
* Данный заголовочный файл содержит определения которые используются для
|
||||
* использования буфера ввода-вывода
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef IO_BUF_H
|
||||
#define IO_BUF_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct {
|
||||
uint8_t *buffer;
|
||||
uint64_t position;
|
||||
uint64_t max_size;
|
||||
} io_buf_t;
|
||||
|
||||
io_buf_t *io_buf_create(uint64_t max_size);
|
||||
void io_buf_destroy(io_buf_t *buffer);
|
||||
void io_buf_write(io_buf_t *buffer, uint8_t *data, uint64_t length);
|
||||
uint8_t *io_buf_read(io_buf_t *buffer);
|
||||
|
||||
#endif // io_buf.h
|
47
kernel/io_buf.c
Normal file
47
kernel/io_buf.c
Normal file
@ -0,0 +1,47 @@
|
||||
/**
|
||||
* io_buf.c
|
||||
* Функции буфера ввода-вывода
|
||||
*
|
||||
* Функционал буфера ввода-вывода
|
||||
*
|
||||
*/
|
||||
|
||||
#include <io_buf.h>
|
||||
#include <log.h>
|
||||
#include <mem.h>
|
||||
#include <stdint.h>
|
||||
#include <tool.h>
|
||||
|
||||
io_buf_t *io_buf_create(uint64_t max_size) {
|
||||
io_buf_t *buffer = mem_alloc(sizeof(io_buf_t));
|
||||
buffer->buffer = mem_alloc(max_size * sizeof(uint8_t));
|
||||
buffer->position = 0;
|
||||
buffer->max_size = max_size;
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void io_buf_destroy(io_buf_t *buffer) {
|
||||
mem_free(buffer->buffer);
|
||||
mem_free(buffer);
|
||||
}
|
||||
|
||||
void io_buf_write(io_buf_t *buffer, uint8_t *data, uint64_t length) {
|
||||
if (buffer->position + length > buffer->max_size) {
|
||||
LOG("Переполнение буффера\n");
|
||||
return;
|
||||
}
|
||||
|
||||
tool_memcpy(buffer->buffer + buffer->position, data, length);
|
||||
buffer->position += length;
|
||||
}
|
||||
|
||||
uint8_t *io_buf_read(io_buf_t *buffer) {
|
||||
uint8_t *data = mem_alloc((buffer->position + 1) * sizeof(uint8_t));
|
||||
|
||||
tool_memcpy(data, buffer->buffer, buffer->position);
|
||||
data[buffer->position] = '\0';
|
||||
buffer->position = 0;
|
||||
tool_memset(buffer->buffer, 0, buffer->max_size);
|
||||
|
||||
return data;
|
||||
}
|
Loading…
Reference in New Issue
Block a user