mirror of
https://github.com/0Nera/BMOSP.git
synced 2024-11-26 02:20:16 +03:00
Добавлены буферы ввода-вывода
This commit is contained in:
parent
37269c9fba
commit
471ee3cde3
2
TODO.md
2
TODO.md
@ -8,7 +8,7 @@
|
|||||||
- [x] Менеджер видеопамяти
|
- [x] Менеджер видеопамяти
|
||||||
- [ ] Менеджер потоков
|
- [ ] Менеджер потоков
|
||||||
- [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