|
|
|
@ -683,75 +683,6 @@ int ventoy_write_buf_to_file(const char *FileName, void *Bufer, int BufLen)
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ventoy_decompress_tar(char *tarbuf, int buflen, int *tarsize)
|
|
|
|
|
{
|
|
|
|
|
int rc = 1;
|
|
|
|
|
int inused;
|
|
|
|
|
HANDLE hFile;
|
|
|
|
|
DWORD dwSize;
|
|
|
|
|
DWORD dwRead;
|
|
|
|
|
WCHAR FullPath[MAX_PATH];
|
|
|
|
|
BYTE *buffer;
|
|
|
|
|
VENTOY_MAGIC Magic;
|
|
|
|
|
|
|
|
|
|
GetModuleFileNameW(NULL, FullPath, MAX_PATH);
|
|
|
|
|
hFile = CreateFileW(FullPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
|
|
|
|
|
if (hFile == INVALID_HANDLE_VALUE)
|
|
|
|
|
{
|
|
|
|
|
vlog("Failed to open self %u\n", LASTERR);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dwSize = GetFileSize(hFile, NULL);
|
|
|
|
|
if (dwSize == INVALID_FILE_SIZE)
|
|
|
|
|
{
|
|
|
|
|
vlog("Invalid self exe size %u\n", LASTERR);
|
|
|
|
|
CHECK_CLOSE_HANDLE(hFile);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
buffer = malloc(dwSize);
|
|
|
|
|
if (!buffer)
|
|
|
|
|
{
|
|
|
|
|
vlog("Failed to malloc %u\n", dwSize);
|
|
|
|
|
CHECK_CLOSE_HANDLE(hFile);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
ReadFile(hFile, buffer, dwSize, &dwRead, NULL);
|
|
|
|
|
|
|
|
|
|
memcpy(&Magic, buffer + dwSize - sizeof(Magic), sizeof(Magic));
|
|
|
|
|
if (Magic.magic1 == 0x54535251 && Magic.magic2 == 0xa4a3a2a1)
|
|
|
|
|
{
|
|
|
|
|
g_unxz_buffer = (UCHAR *)tarbuf;
|
|
|
|
|
g_unxz_len = 0;
|
|
|
|
|
|
|
|
|
|
unxz(buffer + dwSize - Magic.xzlen - sizeof(Magic), Magic.xzlen, NULL, unxz_flush, NULL, &inused, unxz_error);
|
|
|
|
|
vlog("bigexe:%u xzlen:%u rawdata size:%d\n", dwSize, Magic.xzlen, g_unxz_len);
|
|
|
|
|
|
|
|
|
|
if (inused != Magic.xzlen)
|
|
|
|
|
{
|
|
|
|
|
vlog("Failed to unxz www %d\n", inused);
|
|
|
|
|
rc = 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
*tarsize = g_unxz_len;
|
|
|
|
|
rc = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
vlog("Invalid magic 0x%x 0x%x\n", Magic.magic1, Magic.magic2);
|
|
|
|
|
rc = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
free(buffer);
|
|
|
|
|
CHECK_CLOSE_HANDLE(hFile);
|
|
|
|
|
|
|
|
|
|
return rc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static volatile int g_thread_stop = 0;
|
|
|
|
|
static HANDLE g_writeback_thread;
|
|
|
|
|
static HANDLE g_writeback_event;
|
|
|
|
|