12 #include <drv/disk/dpm.h>
15 #include "../lib/libstring/include/string.h"
17 #include "lib/php/explode.h"
19 #include "lib/php/str_replace.h"
21 bool nvfs_debug =
false;
23 NVFS_DECINFO* nvfs_decode(
const char* Name) {
24 NVFS_DECINFO* info = kcalloc(
sizeof(NVFS_DECINFO), 1);
28 qemu_log(
"Decoding name: %s (%x)", Name, Name);
33 if (!is_valid_delim) {
40 qemu_log(
"Disk: %d", info->Disk);
46 qemu_log(
"Supposed path: %s", info->Path);
50 DPM_Disk disk = dpm_info(info->Disk);
52 if (disk.Ready != 1) {
57 memcpy(info->FileSystem, disk.FileSystem,
sizeof(disk.FileSystem));
59 info->DriverFS = fsm_getIDbyName(info->FileSystem);
61 if (info->DriverFS == -1) {
65 int fgm = fsm_getMode(info->DriverFS);
80 size_t nvfs_read(
const char* Name,
size_t Offset,
size_t Count,
void* Buffer){
82 qemu_log(
"Name=%s", Name);
85 NVFS_DECINFO* vinfo = nvfs_decode(Name);
88 if (vinfo->Ready == 0) {
92 res = fsm_read(vinfo->DriverFS, vinfo->Disk, vinfo->Path, Offset, Count, Buffer);
100 int nvfs_create(
const char* Name,
int Mode){
101 NVFS_DECINFO* vinfo = nvfs_decode(Name);
104 if (vinfo->Ready == 0) {
108 res = fsm_create(vinfo->DriverFS, vinfo->Disk, vinfo->Path, Mode);
115 int nvfs_delete(
const char* Name,
int Mode){
116 NVFS_DECINFO* vinfo = nvfs_decode(Name);
119 if (vinfo->Ready == 0) {
123 res = fsm_delete(vinfo->DriverFS, vinfo->Disk, vinfo->Path, Mode);
132 size_t nvfs_write(
const char* Name,
size_t Offset,
size_t Count,
const void *Buffer){
133 NVFS_DECINFO* vinfo = nvfs_decode(Name);
136 if (vinfo->Ready == 0) {
140 res = fsm_write(vinfo->DriverFS, vinfo->Disk, vinfo->Path, Offset, Count, Buffer);
149 FSM_FILE nvfs_info(
const char* Name){
150 NVFS_DECINFO* vinfo = nvfs_decode(Name);
152 qemu_log(
"NVFS INFO:\n"
157 "Disk file system: [%d] %s\n"
158 "Loaded in file system driver: %d",
165 strlen(vinfo->FileSystem),
173 if (vinfo->Ready != 1){
177 file = fsm_info(vinfo->DriverFS, vinfo->Disk, vinfo->Path);
185 FSM_DIR* nvfs_dir(
const char* Name){
186 NVFS_DECINFO* vinfo = nvfs_decode(Name);
188 if (vinfo->Ready != 1) {
190 FSM_DIR* dir = kcalloc(
sizeof(FSM_DIR), 1);
194 FSM_DIR* dir = fsm_dir(vinfo->DriverFS, vinfo->Disk, vinfo->Path);
size_t strlen(const char *str)
Возращает длину строки
void * memcpy(void *restrict destination, const void *restrict source, size_t n)
Копирование непересекающихся массивов используя SSE.
void substr(char *restrict dest, const char *restrict source, int from, int length)
Вырезает и возвращает подстроку из строки
size_t struntil(const char *str, const char find)
Возвращает индекс символа в строке
uint32_t char_replace(char search, char replace, char *subject)
Заменяет все вхождения символа поиска на символ замены