feature (VFS): returning amount of written/read bytes

This commit is contained in:
antifallobst 2023-05-02 18:01:53 +02:00
parent ce905f1a36
commit 406dc0ee9e
4 changed files with 19 additions and 14 deletions

View File

@ -6,8 +6,8 @@
#include "drivers/fs/vfs.h" #include "drivers/fs/vfs.h"
void ramfs_file_delete (vfs_node_T* node); void ramfs_file_delete (vfs_node_T* node);
void ramfs_file_write (vfs_node_T* node, uint64_t size, uint8_t* buffer_in); uint64_t ramfs_file_write (vfs_node_T* node, uint64_t size, uint8_t* buffer_in);
void ramfs_file_read (vfs_node_T* node, uint64_t size, uint8_t* buffer_out); uint64_t ramfs_file_read (vfs_node_T* node, uint64_t size, uint8_t* buffer_out);
#endif //NOX_RAMFS_H #endif //NOX_RAMFS_H

View File

@ -65,8 +65,8 @@ vfs_node_T* vfs_node_resolve_child (vfs_node_T* node, string_t chil
vfs_node_T* vfs_file_create (fs_T* filesystem, string_t path); vfs_node_T* vfs_file_create (fs_T* filesystem, string_t path);
void vfs_file_delete (vfs_node_T* file); void vfs_file_delete (vfs_node_T* file);
void vfs_file_write (vfs_node_T* file, uint64_t position, uint64_t size, uint8_t* buffer_in); uint64_t vfs_file_write (vfs_node_T* file, uint64_t position, uint64_t size, uint8_t* buffer_in);
void vfs_file_read (vfs_node_T* file, uint64_t position, uint64_t size, uint8_t* buffer_out); uint64_t vfs_file_read (vfs_node_T* file, uint64_t position, uint64_t size, uint8_t* buffer_out);
vfs_node_T* vfs_directory_create (fs_T* filesystem, string_t path); vfs_node_T* vfs_directory_create (fs_T* filesystem, string_t path);
void vfs_directory_delete (vfs_node_T* directory); void vfs_directory_delete (vfs_node_T* directory);

View File

@ -10,7 +10,7 @@ void ramfs_file_delete(vfs_node_T* node) {
vfs_node_cache_destruct(node->cache); vfs_node_cache_destruct(node->cache);
} }
void ramfs_file_write(vfs_node_T* node, uint64_t size, uint8_t* buffer_in) { uint64_t ramfs_file_write(vfs_node_T* node, uint64_t size, uint8_t* buffer_in) {
if (node->cache != NULL) { if (node->cache != NULL) {
vfs_node_cache_destruct(node->cache); vfs_node_cache_destruct(node->cache);
} }
@ -18,10 +18,13 @@ void ramfs_file_write(vfs_node_T* node, uint64_t size, uint8_t* buffer_in) {
vfs_node_cache_create(node, size); vfs_node_cache_create(node, size);
memory_copy(buffer_in, node->cache->buffer, size); memory_copy(buffer_in, node->cache->buffer, size);
return size;
} }
void ramfs_file_read(vfs_node_T* node, uint64_t size, uint8_t* buffer_out) { uint64_t ramfs_file_read(vfs_node_T* node, uint64_t size, uint8_t* buffer_out) {
if (node->cache == NULL) { return; } if (node->cache == NULL) { return 0; }
memory_copy(node->cache->buffer, buffer_out, MIN(size, node->cache->buffer_size)); memory_copy(node->cache->buffer, buffer_out, MIN(size, node->cache->buffer_size));
return size;
} }

View File

@ -224,31 +224,33 @@ void vfs_file_delete(vfs_node_T* file) {
vfs_node_destruct(file); vfs_node_destruct(file);
} }
void vfs_file_write(vfs_node_T* file, uint64_t position, uint64_t size, uint8_t* buffer_in) { uint64_t vfs_file_write(vfs_node_T* file, uint64_t position, uint64_t size, uint8_t* buffer_in) {
// in future this probably isn't a good way to determine the size of a file: // in future this probably isn't a good way to determine the size of a file:
file->size = size; file->size = size;
switch (file->filesystem->type) { switch (file->filesystem->type) {
case FS_RAMFS: { case FS_RAMFS: {
ramfs_file_write(file, size, buffer_in); return ramfs_file_write(file, size, buffer_in);
break;
} }
default: { default: {
break; break;
} }
} }
return 0;
} }
void vfs_file_read(vfs_node_T* file, uint64_t position, uint64_t size, uint8_t* buffer_out) { uint64_t vfs_file_read(vfs_node_T* file, uint64_t position, uint64_t size, uint8_t* buffer_out) {
switch (file->filesystem->type) { switch (file->filesystem->type) {
case FS_RAMFS: { case FS_RAMFS: {
ramfs_file_read(file, size, buffer_out); return ramfs_file_read(file, size, buffer_out);
break;
} }
default: { default: {
break; break;
} }
} }
return 0;
} }
vfs_node_T* vfs_directory_create(fs_T* filesystem, string_t path) { vfs_node_T* vfs_directory_create(fs_T* filesystem, string_t path) {