luajitos

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

ramdisk.h (3482B)


      1 #ifndef RAMDISK_H
      2 #define RAMDISK_H
      3 
      4 #include <stdint.h>
      5 #include <lua.h>
      6 
      7 /* Ramdisk node types */
      8 typedef enum {
      9     RAMDISK_FILE = 0,
     10     RAMDISK_DIR = 1
     11 } ramdisk_node_type_t;
     12 
     13 /* Forward declarations */
     14 struct ramdisk_node;
     15 
     16 /* Directory entry */
     17 typedef struct ramdisk_dir_entry {
     18     char* name;
     19     struct ramdisk_node* node;
     20     struct ramdisk_dir_entry* next;
     21 } ramdisk_dir_entry_t;
     22 
     23 /* Ramdisk node (file or directory) */
     24 typedef struct ramdisk_node {
     25     char* name;
     26     ramdisk_node_type_t type;
     27     struct ramdisk_node* parent;
     28 
     29     union {
     30         /* For files */
     31         struct {
     32             uint8_t* data;
     33             uint32_t size;
     34             uint32_t capacity;
     35         } file;
     36 
     37         /* For directories */
     38         struct {
     39             ramdisk_dir_entry_t* entries;
     40             uint32_t entry_count;
     41         } dir;
     42     };
     43 } ramdisk_node_t;
     44 
     45 /* File handle for C API */
     46 typedef struct {
     47     ramdisk_node_t* node;
     48     uint32_t position;
     49     char mode;  // 'r', 'w', 'a'
     50 } ramdisk_handle_t;
     51 
     52 /* Ramdisk operations */
     53 ramdisk_node_t* ramdisk_create_root(void);
     54 void ramdisk_destroy_node(ramdisk_node_t* node);
     55 
     56 /* Directory operations */
     57 ramdisk_node_t* ramdisk_create_dir(ramdisk_node_t* parent, const char* name);
     58 ramdisk_node_t* ramdisk_create_file(ramdisk_node_t* parent, const char* name);
     59 
     60 /* File operations */
     61 int ramdisk_write_file(ramdisk_node_t* file, const uint8_t* data, uint32_t size);
     62 int ramdisk_append_file(ramdisk_node_t* file, const uint8_t* data, uint32_t size);
     63 int ramdisk_read_file(ramdisk_node_t* file, uint8_t* buffer, uint32_t size, uint32_t* bytes_read);
     64 void ramdisk_truncate_file(ramdisk_node_t* file);
     65 
     66 /* Path traversal */
     67 ramdisk_node_t* ramdisk_traverse(ramdisk_node_t* root, const char* path);
     68 ramdisk_node_t* ramdisk_find(ramdisk_node_t* start_node, const char* path);
     69 char* ramdisk_get_full_path(ramdisk_node_t* node);
     70 
     71 /* File handle operations */
     72 ramdisk_handle_t* ramdisk_open(ramdisk_node_t* root, const char* path, const char* mode);
     73 int ramdisk_handle_read(ramdisk_handle_t* handle, uint8_t* buffer, uint32_t size, uint32_t* bytes_read);
     74 int ramdisk_handle_write(ramdisk_handle_t* handle, const uint8_t* data, uint32_t size);
     75 int ramdisk_handle_seek(ramdisk_handle_t* handle, int32_t offset, int whence);
     76 uint32_t ramdisk_handle_tell(ramdisk_handle_t* handle);
     77 void ramdisk_close(ramdisk_handle_t* handle);
     78 
     79 /* Utility functions */
     80 int ramdisk_exists(ramdisk_node_t* root, const char* path);
     81 int ramdisk_is_file(ramdisk_node_t* node);
     82 int ramdisk_is_dir(ramdisk_node_t* node);
     83 uint32_t ramdisk_get_file_size(ramdisk_node_t* file);
     84 
     85 /* Directory listing */
     86 typedef struct {
     87     char** names;
     88     ramdisk_node_type_t* types;
     89     uint32_t count;
     90 } ramdisk_dir_list_t;
     91 
     92 ramdisk_dir_list_t* ramdisk_list_dir(ramdisk_node_t* dir);
     93 void ramdisk_free_dir_list(ramdisk_dir_list_t* list);
     94 
     95 /* Lua bindings */
     96 int lua_ramdisk_create(lua_State* L);
     97 int lua_ramdisk_open(lua_State* L);
     98 int lua_ramdisk_read(lua_State* L);
     99 int lua_ramdisk_write(lua_State* L);
    100 int lua_ramdisk_close(lua_State* L);
    101 int lua_ramdisk_seek(lua_State* L);
    102 int lua_ramdisk_mkdir(lua_State* L);
    103 int lua_ramdisk_exists(lua_State* L);
    104 int lua_ramdisk_list(lua_State* L);
    105 int lua_ramdisk_remove(lua_State* L);
    106 int lua_ramdisk_find(lua_State* L);
    107 
    108 /* Global C ramdisk root */
    109 extern ramdisk_node_t* c_ramdisk_root;
    110 
    111 /* Packed ramdisk loading */
    112 int ramdisk_load_packed(ramdisk_node_t* root, const uint8_t* packed_data, uint32_t packed_size);
    113 
    114 #endif /* RAMDISK_H */