k-tana-zero/k/fd.c

39 lines
682 B
C

#include "fd.h"
struct file_entry fd_table[MAX_FD] = { 0 };
static int find_next_fd(void)
{
for (int fd = 0; fd < MAX_FD; ++fd)
{
if (!fd_table[fd].open)
return fd;
}
return -1;
}
int register_fd(u32 lba, u32 file_size, u8 is_dir)
{
int free_fd = find_next_fd();
if (free_fd < 0)
return -1;
struct file_entry f = { 1, lba, 0, file_size, is_dir };
fd_table[free_fd] = f;
return free_fd;
}
int destroy_fd(int fd)
{
if (fd > MAX_FD || !fd_table[fd].open)
return -1;
fd_table[fd].open = 0;
fd_table[fd].lba = 0;
fd_table[fd].file_offset = 0;
fd_table[fd].file_size = 0;
return 0;
}