38 lines
642 B
C
38 lines
642 B
C
|
#include "fd.h"
|
||
|
|
||
|
static 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)
|
||
|
{
|
||
|
int free_fd = find_next_fd();
|
||
|
if (free_fd < 0)
|
||
|
return -1;
|
||
|
|
||
|
struct file_entry f = { .open = 1, .lba = lba, .file_offset = 0 };
|
||
|
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;
|
||
|
|
||
|
return 0;
|
||
|
}
|