Embed/microCLib

意外被还原的文件
jiuhuan authored at 2026-06-06 21:21:21
e89c487
Tree
1 Parent(s) c94c966
Summary: 3 changed files with 27 additions and 17 deletions.
Modified +6 -11
Modified +12 -1
Modified +9 -5
Modified +6 -11
diff --git a/Core/Stream.c b/Core/Stream.c
index 44964e9..fe7b268 100644
--- a/Core/Stream.c
+++ b/Core/Stream.c
@@ -261,18 +261,12 @@ int StreamSeek(Stream_t* st, int sek, SeekOrigin_e of)
 	return st->Position;
 }
 
-static MemOptions_t const OptDefault =
-{
-	.malloc = malloc,
-	.free = free,
-};
-
 // 自动扩容的 Steam 函数 API。
 // 初始化的时候自动分配 128 字节。后续扩容按照 128 字节增加。
 // 扩容的内存来自 GlobalMalloc GlobalFree 这对函数。
 void AutoStreamInit(Stream_t* st, int len, MemOptions_t* opt)
 {
-	if (opt == NULL)opt = (MemOptions_t*)&OptDefault;
+	if (opt == NULL)opt = (MemOptions_t*)&GlobleMemOpt;
 	if (len < 1)len = 128;
 
 	byte* p = (byte*)opt->malloc(len);
@@ -291,7 +285,7 @@ void AutoStreamInit(Stream_t* st, int len, MemOptions_t* opt)
 
 void AutoStreamDeInit(Stream_t* st, MemOptions_t* opt)
 {
-	if (opt == NULL)opt = (MemOptions_t*)&OptDefault;
+	if (opt == NULL)opt = (MemOptions_t*)&GlobleMemOpt;
 
 	if (st->MemStart != NULL)
 	{
@@ -306,7 +300,8 @@ void AutoStreamDeInit(Stream_t* st, MemOptions_t* opt)
 bool AutoStreamSetCapacity(Stream_t* st, int len, MemOptions_t* opt)
 {
 	if (st->Size >= len)return true;
-	if (opt == NULL)opt = (MemOptions_t*)&OptDefault;
+
+	if (opt == NULL)opt = (MemOptions_t*)&GlobleMemOpt;
 
 	byte* p = (byte*)opt->malloc(len);
 	byte* oldp = st->MemStart;
@@ -323,7 +318,7 @@ bool AutoStreamSetCapacity(Stream_t* st, int len, MemOptions_t* opt)
 
 int AutoStreamWriteByte(Stream_t* st, byte data, MemOptions_t* opt)
 {
-	if (opt == NULL)opt = (MemOptions_t*)&OptDefault;
+	if (opt == NULL)opt = (MemOptions_t*)&GlobleMemOpt;
 
 	int remain = StreamRemian(st);
 	if (remain < 1)
@@ -349,7 +344,7 @@ int AutoStreamWriteByte(Stream_t* st, byte data, MemOptions_t* opt)
 
 int AutoStreamWriteBytes(Stream_t* st, byte* p, int len, MemOptions_t* opt)
 {
-	if (opt == NULL)opt = (MemOptions_t*)&OptDefault;
+	if (opt == NULL)opt = (MemOptions_t*)&GlobleMemOpt;
 
 	int remain = StreamRemian(st);
 	if (remain < len)
Modified +12 -1
diff --git a/Core/Type.c b/Core/Type.c
index f5413e3..34edde6 100644
--- a/Core/Type.c
+++ b/Core/Type.c
@@ -5,17 +5,28 @@
 #if defined ( __CC_ARM )
 __weak MallocFunc	GlobleMalloc = malloc;
 __weak FreeFunc		GlobleFree = free;
+__weak MemOptions_t GlobleMemOpt = {.malloc = malloc, .free = free };
 #endif
 
 #if defined ( __GNUC__ )
 __attribute__((weak)) MallocFunc	 GlobleMalloc = malloc;
 __attribute__((weak)) FreeFunc    GlobleFree = free;
+__attribute__((weak)) MemOptions_t GlobleMemOpt = {.malloc = malloc, .free = free };
 #endif
 
 #if  !(defined ( __CC_ARM ) || defined ( __GNUC__ ))
-#error "need define weak GlobleMalloc GlobleFree"
+#error "need define weak GlobleMalloc GlobleFree GlobleMemOpt"
 #endif
 
+// 一次设置 GlobleMalloc  GlobleFree  GlobleMemOpt
+void SetGlobleMemOpt(MallocFunc malloc, FreeFunc free)
+{
+	GlobleMalloc = malloc;
+	GlobleFree = free;
+	GlobleMemOpt.malloc = malloc;
+	GlobleMemOpt.free = free;
+}
+
 __inline void InitBuffer(Buffer_t* data)	{ memset(data, 0x00, sizeof(Buffer_t));	data->free = GlobleFree;}
 __inline void InitBuffer2(Buffer2_t* data)	{ memset(data, 0x00, sizeof(Buffer2_t));data->free = GlobleFree;}
 
Modified +9 -5
diff --git a/Core/Type.h b/Core/Type.h
index 6be9a4f..73ef0ba 100644
--- a/Core/Type.h
+++ b/Core/Type.h
@@ -33,17 +33,21 @@ typedef void(*EventHandler)(void* sender, void* param);
 typedef void* (*MallocFunc)(size_t size);
 typedef void (*FreeFunc)(void* p);
 
+typedef struct
+{
+	MallocFunc malloc;
+	FreeFunc free;
+}MemOptions_t;
+
 // 全局的 malloc free 函数。 
 // 用于用系统和不用系统时候的切换。避免需要修改太多东西。
 // 需要手动实现。
 extern MallocFunc	GlobleMalloc;
 extern FreeFunc		GlobleFree;
+extern MemOptions_t GlobleMemOpt;
+// 一次设置 GlobleMalloc  GlobleFree  GlobleMemOpt
+void SetGlobleMemOpt(MallocFunc malloc, FreeFunc free);
 
-typedef struct
-{
-	MallocFunc malloc;
-	FreeFunc free;
-}MemOptions_t;
 
 // 缓冲区
 typedef struct