]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - Plugson/src/Core/ventoy_util.h
1.0.67 release
[Ventoy.git] / Plugson / src / Core / ventoy_util.h
1 /******************************************************************************
2 * ventoy_util.h
3 *
4 * Copyright (c) 2021, 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 #ifndef __VENTOY_UTIL_H__
21 #define __VENTOY_UTIL_H__
22
23 #define PLUGSON_TXZ "plugson.tar.xz"
24
25 #define check_free(p) if (p) free(p)
26 #define vtoy_safe_close_fd(fd) \
27 {\
28 if ((fd) >= 0) \
29 { \
30 close(fd); \
31 (fd) = -1; \
32 }\
33 }
34
35 extern char g_cur_dir[MAX_PATH];
36 extern char g_ventoy_dir[MAX_PATH];
37
38 #if defined(_MSC_VER) || defined(WIN32)
39
40 typedef HANDLE pthread_mutex_t;
41
42 static __inline int pthread_mutex_init(pthread_mutex_t *mutex, void *unused)
43 {
44 (void)unused;
45 *mutex = CreateMutex(NULL, FALSE, NULL);
46 return *mutex == NULL ? -1 : 0;
47 }
48
49 static __inline int pthread_mutex_destroy(pthread_mutex_t *mutex)
50 {
51 return CloseHandle(*mutex) == 0 ? -1 : 0;
52 }
53
54 static __inline int pthread_mutex_unlock(pthread_mutex_t *mutex)
55 {
56 return ReleaseMutex(*mutex) == 0 ? -1 : 0;
57 }
58
59 static __inline int pthread_mutex_lock(pthread_mutex_t *mutex)
60 {
61 return WaitForSingleObject(*mutex, INFINITE) == WAIT_OBJECT_0 ? 0 : -1;
62 }
63
64 int ventoy_path_case(char *path, int slash);
65
66 #else
67 int ventoy_get_sys_file_line(char *buffer, int buflen, const char *fmt, ...);
68
69 #define UINT8 uint8_t
70 #define UINT16 uint16_t
71 #define UINT32 uint32_t
72 #define UINT64 uint64_t
73
74 static inline int ventoy_path_case(char *path, int slash)
75 {
76 (void)path;
77 (void)slash;
78 return 0;
79 }
80 #endif
81
82
83 #define LANGUAGE_EN 0
84 #define LANGUAGE_CN 1
85
86 typedef struct SYSINFO
87 {
88 char buildtime[128];
89 int syntax_error;
90 int invalid_config;
91
92 int language;
93 int pathcase;
94 char cur_fsname[64];
95 char cur_capacity[64];
96 char cur_model[256];
97 char cur_ventoy_ver[64];
98 int cur_secureboot;
99 int cur_part_style;
100
101 char ip[32];
102 char port[16];
103 }SYSINFO;
104
105 extern SYSINFO g_sysinfo;
106
107
108
109
110 #define TMAGIC "ustar"
111
112 #define REGTYPE '0'
113 #define AREGTYPE '\0'
114 #define LNKTYPE '1'
115 #define CHRTYPE '3'
116 #define BLKTYPE '4'
117 #define DIRTYPE '5'
118 #define FIFOTYPE '6'
119 #define CONTTYPE '7'
120
121 #pragma pack(1)
122
123 typedef struct tag_tar_head
124 {
125 char name[100];
126 char mode[8];
127 char uid[8];
128 char gid[8];
129 char size[12];
130 char mtime[12];
131 char chksum[8];
132 char typeflag;
133 char linkname[100];
134 char magic[6];
135 char version[2];
136 char uname[32];
137 char gname[32];
138 char devmajor[8];
139 char devminor[8];
140 char prefix[155];
141 char padding[12];
142 }VENTOY_TAR_HEAD;
143
144
145 #pragma pack()
146
147 #define VENTOY_UP_ALIGN(N, align) (((N) + ((align) - 1)) / (align) * (align))
148 #define VENTOY_FILE_MAX 2048
149
150
151 #if defined(_MSC_VER) || defined(WIN32)
152 #define million_sleep(a) Sleep(a)
153 #else
154 #define million_sleep(a) usleep((a) * 1000)
155 #endif
156
157
158 typedef struct ventoy_file
159 {
160 int size;
161 char path[MAX_PATH];
162 int pathlen;
163 void *addr;
164 }ventoy_file;
165
166
167
168 int ventoy_is_file_exist(const char *fmt, ...);
169 int ventoy_is_directory_exist(const char *fmt, ...);
170 void ventoy_gen_preudo_uuid(void *uuid);
171 uint64_t ventoy_get_human_readable_gb(uint64_t SizeBytes);
172 void ventoy_md5(const void *data, uint32_t len, uint8_t *md5);
173 int ventoy_is_disk_mounted(const char *devpath);
174 int unxz(unsigned char *in, int in_size,
175 int (*fill)(void *dest, unsigned int size),
176 int (*flush)(void *src, unsigned int size),
177 unsigned char *out, int *in_used,
178 void (*error)(char *x));
179 int ventoy_read_file_to_buf(const char *FileName, int ExtLen, void **Bufer, int *BufLen);
180 int ventoy_write_buf_to_file(const char *FileName, void *Bufer, int BufLen);
181 const char * ventoy_get_os_language(void);
182 int ventoy_get_file_size(const char *file);
183 int ventoy_www_init(void);
184 void ventoy_www_exit(void);
185 int ventoy_decompress_tar(char *tarbuf, int buflen, int *tarsize);
186 ventoy_file * ventoy_tar_find_file(const char *path);
187 void ventoy_get_json_path(char *path, char *backup);
188 int ventoy_copy_file(const char *a, const char *b);
189
190 typedef int (*ventoy_http_writeback_pf)(void);
191
192 int ventoy_start_writeback_thread(ventoy_http_writeback_pf callback);
193 void ventoy_stop_writeback_thread(void);
194 void ventoy_set_writeback_event(void);
195
196
197 extern unsigned char *g_unxz_buffer;
198 extern int g_unxz_len;
199 void unxz_error(char *x);
200 int unxz_flush(void *src, unsigned int size);
201
202 #endif /* __VENTOY_UTIL_H__ */
203