1 /******************************************************************************
4 * Copyright (c) 2020, longpanda <admin@ventoy.net>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 3 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
21 #ifndef __BISO_UTIL_H__
22 #define __BISO_UTIL_H__
25 #define scnprintf(buf, bufsize, fmt, arg...) \
27 snprintf((buf), (bufsize) - 1, fmt, ##arg);\
28 (buf)[(bufsize) - 1] = 0;\
32 #define MEMORY_DEBUG 0
33 #define MEMORY_DEBUG_DUMP 0
35 #if (MEMORY_DEBUG == 1)
36 #define BISO_MALLOC BISO_UTIL_Malloc
37 #define BISO_ZALLOC BISO_UTIL_Zalloc
38 #define BISO_FREE BISO_UTIL_Free
40 #define BISO_MALLOC malloc
41 #define BISO_ZALLOC zalloc
42 #define BISO_FREE free
45 #define BISO_UCHAR_MAX 0xFF
46 #define BISO_USHORT_MAX 0xFFFF
47 #define BISO_UINT_MAX 0xFFFFFFFF
50 #define BISO_SWAP_UINT(data) \
51 ((((data) & 0x000000FF) << 24) | \
52 (((data) & 0x0000FF00) << 8) | \
53 (((data) & 0x00FF0000) >> 8) | \
54 (((data) & 0xFF000000) >> 24))
56 #define BISO_SWAP_USHORT(data) \
57 ((USHORT)(((data) & 0x00FF) << 8) | \
58 (USHORT)(((data) & 0xFF00) >> 8))
61 #define BISO_STAT_UPDATE(bAdd, a, b) \
63 if (BOOL_TRUE == bAdd) \
73 #if (__BYTE_ORDER == __LITTLE_ENDIAN)
76 #define BISO_LTOH_UINT(data) data
77 #define BISO_LTOH_USHORT(data) data
80 #define BISO_HTOL_UINT(data) data
81 #define BISO_HTOL_USHORT(data) data
84 #define BISO_HTOM_UINT(data) BISO_SWAP_UINT(data)
85 #define BISO_HTOM_USHORT(data) BISO_SWAP_USHORT(data)
87 #elif (__BYTE_ORDER == __BIG_ENDIAN)
90 #define BISO_LTOH_UINT(data) BISO_SWAP_UINT(data)
91 #define BISO_LTOH_USHORT(data) BISO_SWAP_USHORT(data)
94 #define BISO_HTOL_UINT(data) BISO_SWAP_UINT(data)
95 #define BISO_HTOL_USHORT(data) BISO_SWAP_USHORT(data)
98 #define BISO_HTOM_UINT(data) data
99 #define BISO_HTOM_USHORT(data) data
102 #error ("you must first define __BYTE_ORDER !!!")
106 #define ARRAY_SIZE(a) ((UINT)(sizeof (a) / sizeof ((a)[0])))
110 #define DBGASSERT(expr)
114 #define BISO_FILE_BUF_LEN (1024 * 1024)
117 #define BISO_MBUF_MAX_BLK 256
120 typedef struct tagBISO_MBUF
122 UCHAR
*apucDataBuf
[BISO_MBUF_MAX_BLK
];
123 UINT auiBufSize
[BISO_MBUF_MAX_BLK
];
128 /* 检查读操作句柄有没有已经和ISO文件关联 */
129 #define BISO_IS_READ_HANDLE_VALID(pstRead) \
130 (NULL == (((BISO_PARSER_S *)pstRead)->pstPVD) ? BOOL_FALSE : BOOL_TRUE)
131 #define BISO_CHECK_READ_HANDLE(pstRead) \
133 if (NULL == ((BISO_PARSER_S *)(pstRead))->pstPVD) \
135 return BISO_ERR_HANDLE_UNINITIALIZED; \
140 #define BISO_SET_FLAG(pstFileNode, pstDirTree) \
142 (pstFileNode)->ucFlag = BISO_NODE_REGFILE; \
143 if (NULL != (pstDirTree)->pstDirStat) \
145 (pstFileNode)->ucFlag = BISO_NODE_DIRECTORY; \
147 else if (BOOL_TRUE == BISO_DIR_TREE_IS_SYMLINK(pstDirTree)) \
149 (pstFileNode)->ucFlag = BISO_NODE_SYMLINK; \
153 #define BISO_QUEUE_PTR_NUM 1024
155 /* 队列节点,为避免频繁分配内存,这里每次扩展1024个指针的长度空间 */
156 typedef struct tagBISO_QUEUE_NODE
158 BISO_DLL_NODE_S stNode
;
159 PVOID apList
[BISO_QUEUE_PTR_NUM
];
165 typedef BISO_DLL_S BISO_QUEUE_S
;
167 INT
BISO_UTIL_GetTimeZone(VOID
);
169 CHAR
* BISO_UTIL_CopyStr
171 IN CONST CHAR
*szSrc
,
175 CHAR
* BISO_UTIL_CopyUCS2Str
177 IN CONST CHAR
*szSrc
,
181 VOID
BISO_UTIL_PathProc(INOUT CHAR
*pcPath
, INOUT UINT
*puiLen
);
182 ULONG BISO_UTIL_PathSplit
184 IN CONST CHAR
*pcFullPath
,
189 ULONG BISO_UTIL_ReadFile
191 IN CONST CHAR
*pcFileName
,
197 ULONG BISO_MBUF_Append
199 IN BISO_MBUF_S
*pstMBuf
,
203 VOID
BISO_MBUF_Free(IN BISO_MBUF_S
*pstMBuf
);
204 VOID
BISO_MBUF_CopyToBuf(IN CONST BISO_MBUF_S
*pstMBuf
, OUT VOID
*pDataBuf
);
205 VOID
BISO_MBUF_PULLUP(INOUT BISO_MBUF_S
*pstMBuf
);
207 BISO_QUEUE_S
* BISO_QUEUE_Create(VOID
);
208 VOID
BISO_QUEUE_Destroy(IN BISO_QUEUE_S
*pstQueue
);
209 VOID
BISO_QUEUE_Push(IN BISO_QUEUE_S
*pstQueue
, IN VOID
*pData
);
210 VOID
* BISO_QUEUE_PopHead(IN BISO_QUEUE_S
*pstQueue
);
211 VOID
* BISO_QUEUE_PopTail(IN BISO_QUEUE_S
*pstQueue
);
212 VOID
* BISO_UTIL_Malloc(IN
size_t ulSize
);
213 VOID
* BISO_UTIL_Zalloc(IN
size_t ulSize
);
214 VOID
BISO_UTIL_Free(IN VOID
*pData
);
215 VOID
BISO_UTIL_DumpMemOp(VOID
);
217 ULONG BISO_UTIL_ExtractFile
219 IN BISO_FILE_S
*pstFile
,
222 IN CONST CHAR
*pcNewFileName
224 BOOL_T
BISO_PLAT_IsPathExist(IN CONST CHAR
*pcPath
);
225 ULONG
BISO_PLAT_MkDir(IN CONST CHAR
*pcFullPath
);
226 UINT
BISO_PLAT_GetMaxPath(VOID
);
228 BISO_FILE_S
* BISO_PLAT_OpenExistFile(IN CONST CHAR
*pcFileName
);
229 BISO_FILE_S
* BISO_PLAT_CreateNewFile(IN CONST CHAR
*pcFileName
);
230 VOID
BISO_PLAT_CloseFile(IN BISO_FILE_S
*pstFile
);
231 INT64
BISO_PLAT_SeekFile(BISO_FILE_S
*pstFile
, INT64 i64Offset
, INT iFromWhere
);
232 UINT64 BISO_PLAT_ReadFile
234 IN BISO_FILE_S
*pstFile
,
239 UINT64 BISO_PLAT_WriteFile
241 IN BISO_FILE_S
*pstFile
,
247 VOID
*zalloc(size_t size
);
249 #endif /* __BISO_UTIL_H__ */