]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - VtoyTool/BabyISO/biso_util.h
added Spanish (Latinoamérica) translation (#1865)
[Ventoy.git] / VtoyTool / BabyISO / biso_util.h
1 /******************************************************************************
2 * biso_util.h
3 *
4 * Copyright (c) 2020, longpanda <admin@ventoy.net>
5 *
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.
10 *
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.
15 *
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/>.
18 *
19 */
20
21 #ifndef __BISO_UTIL_H__
22 #define __BISO_UTIL_H__
23
24 #ifndef scnprintf
25 #define scnprintf(buf, bufsize, fmt, arg...) \
26 {\
27 snprintf((buf), (bufsize) - 1, fmt, ##arg);\
28 (buf)[(bufsize) - 1] = 0;\
29 }
30 #endif
31
32 #define MEMORY_DEBUG 0
33 #define MEMORY_DEBUG_DUMP 0
34
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
39 #else
40 #define BISO_MALLOC malloc
41 #define BISO_ZALLOC zalloc
42 #define BISO_FREE free
43 #endif
44
45 #define BISO_UCHAR_MAX 0xFF
46 #define BISO_USHORT_MAX 0xFFFF
47 #define BISO_UINT_MAX 0xFFFFFFFF
48
49 /* 无条件字节序转换 */
50 #define BISO_SWAP_UINT(data) \
51 ((((data) & 0x000000FF) << 24) | \
52 (((data) & 0x0000FF00) << 8) | \
53 (((data) & 0x00FF0000) >> 8) | \
54 (((data) & 0xFF000000) >> 24))
55
56 #define BISO_SWAP_USHORT(data) \
57 ((USHORT)(((data) & 0x00FF) << 8) | \
58 (USHORT)(((data) & 0xFF00) >> 8))
59
60 /* 更新计数(加或减) */
61 #define BISO_STAT_UPDATE(bAdd, a, b) \
62 { \
63 if (BOOL_TRUE == bAdd) \
64 { \
65 (a) += (b); \
66 } \
67 else \
68 { \
69 (a) -= (b); \
70 } \
71 }
72
73 #if (__BYTE_ORDER == __LITTLE_ENDIAN)
74
75 /* 从小字节序转为主机序 */
76 #define BISO_LTOH_UINT(data) data
77 #define BISO_LTOH_USHORT(data) data
78
79 /* 从主机序转为小字节序 */
80 #define BISO_HTOL_UINT(data) data
81 #define BISO_HTOL_USHORT(data) data
82
83 /* 从主机序转为大字节序 */
84 #define BISO_HTOM_UINT(data) BISO_SWAP_UINT(data)
85 #define BISO_HTOM_USHORT(data) BISO_SWAP_USHORT(data)
86
87 #elif (__BYTE_ORDER == __BIG_ENDIAN)
88
89 /* 从小字节序转为主机序 */
90 #define BISO_LTOH_UINT(data) BISO_SWAP_UINT(data)
91 #define BISO_LTOH_USHORT(data) BISO_SWAP_USHORT(data)
92
93 /* 从主机序转为小字节序 */
94 #define BISO_HTOL_UINT(data) BISO_SWAP_UINT(data)
95 #define BISO_HTOL_USHORT(data) BISO_SWAP_USHORT(data)
96
97 /* 从主机序转为大字节序 */
98 #define BISO_HTOM_UINT(data) data
99 #define BISO_HTOM_USHORT(data) data
100
101 #else
102 #error ("you must first define __BYTE_ORDER !!!")
103 #endif
104
105 #ifndef ARRAY_SIZE
106 #define ARRAY_SIZE(a) ((UINT)(sizeof (a) / sizeof ((a)[0])))
107 #endif
108
109 #ifndef DBGASSERT
110 #define DBGASSERT(expr)
111 #endif
112
113 /* 读写文件时的缓冲区大小 1M */
114 #define BISO_FILE_BUF_LEN (1024 * 1024)
115
116 /* MBUF中最大内存块个数 */
117 #define BISO_MBUF_MAX_BLK 256
118
119 /* MBUF 结构 */
120 typedef struct tagBISO_MBUF
121 {
122 UCHAR *apucDataBuf[BISO_MBUF_MAX_BLK];
123 UINT auiBufSize[BISO_MBUF_MAX_BLK];
124 UINT uiCurBufNum;
125 UINT uiTotDataSize;
126 }BISO_MBUF_S;
127
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) \
132 {\
133 if (NULL == ((BISO_PARSER_S *)(pstRead))->pstPVD) \
134 { \
135 return BISO_ERR_HANDLE_UNINITIALIZED; \
136 } \
137 }
138
139 /* 设置类型 */
140 #define BISO_SET_FLAG(pstFileNode, pstDirTree) \
141 { \
142 (pstFileNode)->ucFlag = BISO_NODE_REGFILE; \
143 if (NULL != (pstDirTree)->pstDirStat) \
144 { \
145 (pstFileNode)->ucFlag = BISO_NODE_DIRECTORY; \
146 } \
147 else if (BOOL_TRUE == BISO_DIR_TREE_IS_SYMLINK(pstDirTree)) \
148 { \
149 (pstFileNode)->ucFlag = BISO_NODE_SYMLINK; \
150 } \
151 }
152
153 #define BISO_QUEUE_PTR_NUM 1024
154
155 /* 队列节点,为避免频繁分配内存,这里每次扩展1024个指针的长度空间 */
156 typedef struct tagBISO_QUEUE_NODE
157 {
158 BISO_DLL_NODE_S stNode;
159 PVOID apList[BISO_QUEUE_PTR_NUM];
160 USHORT usFirst;
161 USHORT usLast;
162 }BISO_QUEUE_NODE_S;
163
164 /* 队列/堆栈 简单实现 */
165 typedef BISO_DLL_S BISO_QUEUE_S;
166
167 INT BISO_UTIL_GetTimeZone(VOID);
168
169 CHAR * BISO_UTIL_CopyStr
170 (
171 IN CONST CHAR *szSrc,
172 IN UINT uiSrcSize,
173 OUT CHAR *szDest
174 );
175 CHAR * BISO_UTIL_CopyUCS2Str
176 (
177 IN CONST CHAR *szSrc,
178 IN UINT uiSrcSize,
179 OUT CHAR *szDest
180 );
181 VOID BISO_UTIL_PathProc(INOUT CHAR *pcPath, INOUT UINT *puiLen);
182 ULONG BISO_UTIL_PathSplit
183 (
184 IN CONST CHAR *pcFullPath,
185 OUT UINT *puiDirNum,
186 OUT UINT *puiDirPos
187 );
188
189 ULONG BISO_UTIL_ReadFile
190 (
191 IN CONST CHAR *pcFileName,
192 IN UINT64 ui64Seek,
193 IN UINT uiDataLen,
194 OUT VOID *pDataBuf
195 );
196
197 ULONG BISO_MBUF_Append
198 (
199 IN BISO_MBUF_S *pstMBuf,
200 IN UINT uiDataSize,
201 IN VOID *pData
202 );
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);
206
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);
216
217 ULONG BISO_UTIL_ExtractFile
218 (
219 IN BISO_FILE_S *pstFile,
220 IN UINT64 ui64Seek,
221 IN UINT64 ui64Len,
222 IN CONST CHAR *pcNewFileName
223 );
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);
227
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
233 (
234 IN BISO_FILE_S *pstFile,
235 IN UINT uiBlkSize,
236 IN UINT uiBlkNum,
237 OUT VOID *pBuf
238 );
239 UINT64 BISO_PLAT_WriteFile
240 (
241 IN BISO_FILE_S *pstFile,
242 IN UINT uiBlkSize,
243 IN UINT uiBlkNum,
244 IN VOID *pBuf
245 );
246
247 VOID *zalloc(size_t size);
248
249 #endif /* __BISO_UTIL_H__ */
250