1 /* 2 * PROJECT: ReactOS Zip Shell Extension 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: zip pidl handling 5 * COPYRIGHT: Copyright 2017-2019 Mark Jansen (mark.jansen@reactos.org) 6 */ 7 8 #include "precomp.h" 9 10 LPITEMIDLIST _ILCreate(ZipPidlType Type, LPCSTR lpString, unz_file_info64& info) 11 { 12 int cbData = sizeof(ZipPidlEntry) + strlen(lpString); 13 ZipPidlEntry* pidl = (ZipPidlEntry*)SHAlloc(cbData + sizeof(WORD)); 14 if (!pidl) 15 return NULL; 16 17 ZeroMemory(pidl, cbData + sizeof(WORD)); 18 19 pidl->cb = cbData; 20 pidl->MagicType = 'z'; 21 pidl->ZipType = Type; 22 23 if (Type != ZIP_PIDL_DIRECTORY) 24 { 25 pidl->CompressedSize = info.compressed_size; 26 pidl->UncompressedSize = info.uncompressed_size; 27 pidl->DosDate = info.dosDate; 28 pidl->Password = info.flag & MINIZIP_PASSWORD_FLAG; 29 } 30 31 strcpy(pidl->Name, lpString); 32 *(WORD*)((char*)pidl + cbData) = 0; 33 34 return (LPITEMIDLIST)pidl; 35 } 36 37 38 const ZipPidlEntry* _ZipFromIL(LPCITEMIDLIST pidl) 39 { 40 const ZipPidlEntry* zipPidl = (const ZipPidlEntry*)pidl; 41 if (zipPidl->MagicType == 'z') 42 return zipPidl; 43 return NULL; 44 } 45