1 /******************************************************************************
4 * Copyright (c) 2021, 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/>.
20 #ifndef __VENTOY_UTIL_H__
21 #define __VENTOY_UTIL_H__
23 #define check_free(p) if (p) free(p)
24 #define vtoy_safe_close_fd(fd) \
33 extern char g_cur_dir
[MAX_PATH
];
34 extern char g_ventoy_dir
[MAX_PATH
];
36 #if defined(_MSC_VER) || defined(WIN32)
38 typedef HANDLE pthread_mutex_t
;
40 static __inline
int pthread_mutex_init(pthread_mutex_t
*mutex
, void *unused
)
43 *mutex
= CreateMutex(NULL
, FALSE
, NULL
);
44 return *mutex
== NULL
? -1 : 0;
47 static __inline
int pthread_mutex_destroy(pthread_mutex_t
*mutex
)
49 return CloseHandle(*mutex
) == 0 ? -1 : 0;
52 static __inline
int pthread_mutex_unlock(pthread_mutex_t
*mutex
)
54 return ReleaseMutex(*mutex
) == 0 ? -1 : 0;
57 static __inline
int pthread_mutex_lock(pthread_mutex_t
*mutex
)
59 return WaitForSingleObject(*mutex
, INFINITE
) == WAIT_OBJECT_0
? 0 : -1;
62 int ventoy_path_case(char *path
, int slash
);
65 int ventoy_get_sys_file_line(char *buffer
, int buflen
, const char *fmt
, ...);
68 #define UINT16 uint16_t
69 #define UINT32 uint32_t
70 #define UINT64 uint64_t
72 static inline int ventoy_path_case(char *path
, int slash
)
84 typedef struct SYSINFO
92 char cur_capacity
[64];
94 char cur_ventoy_ver
[64];
102 extern SYSINFO g_sysinfo
;
107 #define TMAGIC "ustar"
110 #define AREGTYPE '\0'
120 typedef struct tag_tar_head
143 typedef struct VENTOY_MAGIC
145 uint32_t magic1
; // 0x51 0x52 0x53 0x54
147 uint32_t magic2
; // 0xa1 0xa2 0xa3 0xa4
154 #define VENTOY_UP_ALIGN(N, align) (((N) + ((align) - 1)) / (align) * (align))
155 #define VENTOY_FILE_MAX 2048
158 #if defined(_MSC_VER) || defined(WIN32)
159 #define million_sleep(a) Sleep(a)
161 #define million_sleep(a) usleep((a) * 1000)
165 typedef struct ventoy_file
175 int ventoy_is_file_exist(const char *fmt
, ...);
176 int ventoy_is_directory_exist(const char *fmt
, ...);
177 void ventoy_gen_preudo_uuid(void *uuid
);
178 uint64_t ventoy_get_human_readable_gb(uint64_t SizeBytes
);
179 void ventoy_md5(const void *data
, uint32_t len
, uint8_t *md5
);
180 int ventoy_is_disk_mounted(const char *devpath
);
181 int unxz(unsigned char *in
, int in_size
,
182 int (*fill
)(void *dest
, unsigned int size
),
183 int (*flush
)(void *src
, unsigned int size
),
184 unsigned char *out
, int *in_used
,
185 void (*error
)(char *x
));
186 int ventoy_read_file_to_buf(const char *FileName
, int ExtLen
, void **Bufer
, int *BufLen
);
187 int ventoy_write_buf_to_file(const char *FileName
, void *Bufer
, int BufLen
);
188 const char * ventoy_get_os_language(void);
189 int ventoy_get_file_size(const char *file
);
190 int ventoy_www_init(void);
191 void ventoy_www_exit(void);
192 int ventoy_decompress_tar(char *tarbuf
, int buflen
, int *tarsize
);
193 ventoy_file
* ventoy_tar_find_file(const char *path
);
194 void ventoy_get_json_path(char *path
, char *backup
);
195 int ventoy_copy_file(const char *a
, const char *b
);
197 typedef int (*ventoy_http_writeback_pf
)(void);
199 int ventoy_start_writeback_thread(ventoy_http_writeback_pf callback
);
200 void ventoy_stop_writeback_thread(void);
201 void ventoy_set_writeback_event(void);
204 extern unsigned char *g_unxz_buffer
;
205 extern int g_unxz_len
;
206 void unxz_error(char *x
);
207 int unxz_flush(void *src
, unsigned int size
);
209 #endif /* __VENTOY_UTIL_H__ */