From 531dced4234c4dbbcc2c23f140087b2669f2e8f4 Mon Sep 17 00:00:00 2001 From: lyon Date: Sun, 12 Feb 2023 11:12:28 +0800 Subject: [PATCH] use pikafs_fxxx API --- package/PikaStdLib/PikaStdData_FILEIO.c | 39 +++---------------- port/linux/.vscode/launch.json | 2 +- .../PikaStdLib/PikaStdData_FILEIO.c | 39 +++---------------- src/PikaCompiler.c | 36 +++++++++++++++++ src/PikaCompiler.h | 12 ++++++ 5 files changed, 59 insertions(+), 69 deletions(-) diff --git a/package/PikaStdLib/PikaStdData_FILEIO.c b/package/PikaStdLib/PikaStdData_FILEIO.c index 38b54a9f6..6ebb7139d 100644 --- a/package/PikaStdLib/PikaStdData_FILEIO.c +++ b/package/PikaStdLib/PikaStdData_FILEIO.c @@ -3,30 +3,13 @@ #include "PikaCompiler.h" #include "PikaStdData_List.h" -typedef struct { - uint8_t* addr; - size_t size; - size_t pos; -} PIKAFS_FILE; - int PikaStdData_FILEIO_init(PikaObj* self, char* path, char* mode) { if (obj_isArgExist(self, "_f")) { /* already initialized */ return 0; } if (strIsStartWith(path, "pikafs/")) { - PIKAFS_FILE* f = (PIKAFS_FILE*)pikaMalloc(sizeof(PIKAFS_FILE)); - memset(f, 0, sizeof(PIKAFS_FILE)); - extern volatile PikaObj* __pikaMain; - uint8_t* library_bytes = obj_getPtr((PikaObj*)__pikaMain, "@libraw"); - if (NULL == library_bytes) { - return 1; - } - char* file_name = path + 7; - if (PIKA_RES_OK != _loadModuleDataWithName(library_bytes, file_name, - &f->addr, &f->size)) { - return 1; - } + pikafs_FILE* f = pikafs_fopen(path + 7, "rb"); obj_setInt(self, "pikafs", PIKA_TRUE); obj_setPtr(self, "_f", f); obj_setStr(self, "_mode", mode); @@ -43,11 +26,11 @@ int PikaStdData_FILEIO_init(PikaObj* self, char* path, char* mode) { void PikaStdData_FILEIO_close(PikaObj* self) { if (PIKA_TRUE == obj_getInt(self, "pikafs")) { - PIKAFS_FILE* f = obj_getPtr(self, "_f"); + pikafs_FILE* f = obj_getPtr(self, "_f"); if (NULL == f) { return; } - pikaFree(f, sizeof(PIKAFS_FILE)); + pikafs_fclose(f); obj_setPtr(self, "_f", NULL); return; } @@ -59,18 +42,6 @@ void PikaStdData_FILEIO_close(PikaObj* self) { obj_setPtr(self, "_f", NULL); } -size_t _pikafs_fread(void* buf, size_t size, size_t count, PIKAFS_FILE* f) { - if (f->pos >= f->size) { - return 0; - } - if (f->pos + size * count > f->size) { - count = (f->size - f->pos) / size; - } - __platform_memcpy(buf, f->addr + f->pos, size * count); - f->pos += size * count; - return count; -} - Arg* PikaStdData_FILEIO_read(PikaObj* self, PikaTuple* size_) { int size = 0; if (pikaTuple_getSize(size_) == 0) { @@ -87,11 +58,11 @@ Arg* PikaStdData_FILEIO_read(PikaObj* self, PikaTuple* size_) { int n = 0; /* read */ if (PIKA_TRUE == obj_getInt(self, "pikafs")) { - PIKAFS_FILE* f = obj_getPtr(self, "_f"); + pikafs_FILE* f = obj_getPtr(self, "_f"); if (NULL == f) { return NULL; } - n = _pikafs_fread(buf, 1, size, f); + n = pikafs_fread(buf, 1, size, f); } else { FILE* f = obj_getPtr(self, "_f"); if (f == NULL) { diff --git a/port/linux/.vscode/launch.json b/port/linux/.vscode/launch.json index 1d23a48f1..0ca5c3e63 100644 --- a/port/linux/.vscode/launch.json +++ b/port/linux/.vscode/launch.json @@ -11,7 +11,7 @@ "program": "${workspaceFolder}/build/test/pikascript_test", // "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain", "args": [ - "--gtest_filter=except.except_break" + // "--gtest_filter=except.except_break" ], "stopAtEntry": false, "cwd": "${workspaceFolder}", diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_FILEIO.c b/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_FILEIO.c index 38b54a9f6..6ebb7139d 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_FILEIO.c +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_FILEIO.c @@ -3,30 +3,13 @@ #include "PikaCompiler.h" #include "PikaStdData_List.h" -typedef struct { - uint8_t* addr; - size_t size; - size_t pos; -} PIKAFS_FILE; - int PikaStdData_FILEIO_init(PikaObj* self, char* path, char* mode) { if (obj_isArgExist(self, "_f")) { /* already initialized */ return 0; } if (strIsStartWith(path, "pikafs/")) { - PIKAFS_FILE* f = (PIKAFS_FILE*)pikaMalloc(sizeof(PIKAFS_FILE)); - memset(f, 0, sizeof(PIKAFS_FILE)); - extern volatile PikaObj* __pikaMain; - uint8_t* library_bytes = obj_getPtr((PikaObj*)__pikaMain, "@libraw"); - if (NULL == library_bytes) { - return 1; - } - char* file_name = path + 7; - if (PIKA_RES_OK != _loadModuleDataWithName(library_bytes, file_name, - &f->addr, &f->size)) { - return 1; - } + pikafs_FILE* f = pikafs_fopen(path + 7, "rb"); obj_setInt(self, "pikafs", PIKA_TRUE); obj_setPtr(self, "_f", f); obj_setStr(self, "_mode", mode); @@ -43,11 +26,11 @@ int PikaStdData_FILEIO_init(PikaObj* self, char* path, char* mode) { void PikaStdData_FILEIO_close(PikaObj* self) { if (PIKA_TRUE == obj_getInt(self, "pikafs")) { - PIKAFS_FILE* f = obj_getPtr(self, "_f"); + pikafs_FILE* f = obj_getPtr(self, "_f"); if (NULL == f) { return; } - pikaFree(f, sizeof(PIKAFS_FILE)); + pikafs_fclose(f); obj_setPtr(self, "_f", NULL); return; } @@ -59,18 +42,6 @@ void PikaStdData_FILEIO_close(PikaObj* self) { obj_setPtr(self, "_f", NULL); } -size_t _pikafs_fread(void* buf, size_t size, size_t count, PIKAFS_FILE* f) { - if (f->pos >= f->size) { - return 0; - } - if (f->pos + size * count > f->size) { - count = (f->size - f->pos) / size; - } - __platform_memcpy(buf, f->addr + f->pos, size * count); - f->pos += size * count; - return count; -} - Arg* PikaStdData_FILEIO_read(PikaObj* self, PikaTuple* size_) { int size = 0; if (pikaTuple_getSize(size_) == 0) { @@ -87,11 +58,11 @@ Arg* PikaStdData_FILEIO_read(PikaObj* self, PikaTuple* size_) { int n = 0; /* read */ if (PIKA_TRUE == obj_getInt(self, "pikafs")) { - PIKAFS_FILE* f = obj_getPtr(self, "_f"); + pikafs_FILE* f = obj_getPtr(self, "_f"); if (NULL == f) { return NULL; } - n = _pikafs_fread(buf, 1, size, f); + n = pikafs_fread(buf, 1, size, f); } else { FILE* f = obj_getPtr(self, "_f"); if (f == NULL) { diff --git a/src/PikaCompiler.c b/src/PikaCompiler.c index 1beda5cb2..f866ce1e4 100644 --- a/src/PikaCompiler.c +++ b/src/PikaCompiler.c @@ -865,3 +865,39 @@ PIKA_RES pikaMaker_linkRaw(PikaMaker* self, char* file_path) { LibObj_staticLinkFile(lib, file_path); return PIKA_RES_OK; } + +pikafs_FILE* pikafs_fopen(char* file_name, char* mode) { + pikafs_FILE* f = (pikafs_FILE*)pikaMalloc(sizeof(pikafs_FILE)); + memset(f, 0, sizeof(pikafs_FILE)); + extern volatile PikaObj* __pikaMain; + uint8_t* library_bytes = obj_getPtr((PikaObj*)__pikaMain, "@libraw"); + if (NULL == library_bytes) { + return NULL; + } + if (PIKA_RES_OK != + _loadModuleDataWithName(library_bytes, file_name, &f->addr, &f->size)) { + return NULL; + } + return f; +} + +int pikafs_fread(void* buf, size_t size, size_t count, pikafs_FILE* f) { + if (f->pos >= f->size) { + return 0; + } + if (f->pos + size * count > f->size) { + count = (f->size - f->pos) / size; + } + __platform_memcpy(buf, f->addr + f->pos, size * count); + f->pos += size * count; + return count; +} + +int pikafs_fwrite(void* buf, size_t size, size_t count, pikafs_FILE* file) { + return -1; +} + +int pikafs_fclose(pikafs_FILE* file) { + pikaFree(file,sizeof(pikafs_FILE)); + return 0; +} diff --git a/src/PikaCompiler.h b/src/PikaCompiler.h index 8dfb313e0..2bdc6a6fd 100644 --- a/src/PikaCompiler.h +++ b/src/PikaCompiler.h @@ -45,4 +45,16 @@ PIKA_RES _loadModuleDataWithName(uint8_t* library_bytes, #define PIKA_APP_VERSION_OFFSET 2 #define PIKA_APP_MODULE_NUM_OFFSET 3 +typedef struct { + uint8_t* addr; + size_t size; + size_t pos; +} pikafs_FILE; + +pikafs_FILE* pikafs_fopen(char* file_name, char* mode); +int pikafs_fread(void* buf, size_t size, size_t count, pikafs_FILE* file); +int pikafs_fwrite(void* buf, size_t size, size_t count, pikafs_FILE* file); +int pikafs_fclose(pikafs_FILE* file); + + #endif