47 lines
1.8 KiB
C
47 lines
1.8 KiB
C
// This file is part of noxos and licensed under the MIT open source license
|
|
|
|
#ifndef NOX_FILE_DESCRIPTOR_H
|
|
#define NOX_FILE_DESCRIPTOR_H
|
|
|
|
#include "utils/stdtypes.h"
|
|
#include "utils/bitmap.h"
|
|
#include "drivers/builtin/fs/vfs.h"
|
|
|
|
#define FILE_DESCRIPTOR_ARRAY_CHUNK_SIZE 32
|
|
|
|
typedef uint32_t file_descriptor_t;
|
|
|
|
typedef enum {
|
|
FILE_DESCRIPTOR_INVALID,
|
|
FILE_DESCRIPTOR_STDOUT,
|
|
FILE_DESCRIPTOR_STDIN,
|
|
FILE_DESCRIPTOR_STDERR,
|
|
|
|
FILE_DESCRIPTORS_ENUM_END
|
|
} std_file_descriptors_E;
|
|
|
|
typedef struct file_descriptor_array_chunk_T file_descriptor_array_chunk_T;
|
|
struct file_descriptor_array_chunk_T {
|
|
file_descriptor_array_chunk_T* prev;
|
|
file_descriptor_array_chunk_T* next;
|
|
vfs_node_T* lookup [FILE_DESCRIPTOR_ARRAY_CHUNK_SIZE];
|
|
bitmap_T bitmap;
|
|
uint32_t amount;
|
|
};
|
|
|
|
typedef struct {
|
|
file_descriptor_array_chunk_T* base_chunk;
|
|
} file_descriptor_array_T;
|
|
|
|
file_descriptor_t file_descriptor_request (file_descriptor_array_T* fd_array, vfs_node_T* node);
|
|
vfs_node_T* file_descriptor_resolve (file_descriptor_array_T* fd_array, file_descriptor_t fd);
|
|
void file_descriptor_free (file_descriptor_array_T* fd_array, file_descriptor_t fd);
|
|
|
|
file_descriptor_array_T* file_descriptor_array_alloc ();
|
|
void file_descriptor_array_destruct (file_descriptor_array_T* fd_array);
|
|
|
|
file_descriptor_array_chunk_T* file_descriptor_array_chunk_alloc (file_descriptor_array_chunk_T* prev);
|
|
void file_descriptor_array_chunk_destruct (file_descriptor_array_chunk_T* chunk);
|
|
|
|
#endif //NOX_FILE_DESCRIPTOR_H
|