/*********************************************************************** * LZCopy (KERNEL32.@) * * Copies everything from src to dest * if src is a LZ compressed file, it will be uncompressed. * will return the number of bytes written to dest or errors. */ LONG WINAPI LZCopy( HFILE src, HFILE dest ) { int usedlzinit = 0, ret, wret; LONG len; HFILE oldsrc = src, srcfd; FILETIME filetime; struct lzstate *lzs; #define BUFLEN 1000 CHAR buf[BUFLEN]; /* we need that weird typedef, for i can't seem to get function pointer * casts right. (Or they probably just do not like WINAPI in general) */ typedef UINT (WINAPI *_readfun)(HFILE,LPVOID,UINT); _readfun xread; TRACE("(%d,%d)\n",src,dest); if (!IS_LZ_HANDLE(src)) { src = LZInit(src); if ((INT)src <= 0) return 0; if (src != oldsrc) usedlzinit=1; } /* not compressed? just copy */ if (!IS_LZ_HANDLE(src)) #ifdef __REACTOS__ xread=(_readfun)_hread; // ROSHACK #else xread=_lread; #endif else
/*********************************************************************** * LZInit (LZEXPAND.3) */ HFILE16 WINAPI LZInit16( HFILE16 hfSrc ) { HFILE ret = LZInit( (HFILE)DosFileHandleToWin32Handle(hfSrc) ); if (IS_LZ_HANDLE(ret)) return ret; if ((INT)ret <= 0) return ret; return hfSrc; }
/*********************************************************************** * LZCopy (KERNEL32.@) * * Copies everything from src to dest * if src is a LZ compressed file, it will be uncompressed. * will return the number of bytes written to dest or errors. */ LONG WINAPI LZCopy( HFILE src, HFILE dest ) { int usedlzinit = 0, ret, wret; LONG len; HFILE oldsrc = src, srcfd; FILETIME filetime; struct lzstate *lzs; #define BUFLEN 1000 CHAR buf[BUFLEN]; /* we need that weird typedef, for i can't seem to get function pointer * casts right. (Or they probably just do not like WINAPI in general) */ typedef UINT (WINAPI *_readfun)(HFILE,LPVOID,UINT); _readfun xread; DPRINT("(%d,%d)\n",src,dest); if (!IS_LZ_HANDLE(src)) { src = LZInit(src); if ((INT)src <= 0) return 0; if (src != oldsrc) usedlzinit=1; } /* not compressed? just copy */ if (!IS_LZ_HANDLE(src)) xread=_lread; else xread=(_readfun)LZRead; len=0; while (1) { ret=xread(src,buf,BUFLEN); if (ret<=0) { if (ret==0) break; if (ret==-1) return LZERROR_READ; return ret; } len += ret; wret = _hwrite(dest,buf,ret); if (wret!=ret) return LZERROR_WRITE; } /* Maintain the timestamp of source file to destination file */ srcfd = (!(lzs = GET_LZ_STATE(src))) ? src : lzs->realfd; GetFileTime( LongToHandle(srcfd), NULL, NULL, &filetime ); SetFileTime( LongToHandle(dest), NULL, NULL, &filetime ); /* close handle */ if (usedlzinit) LZClose(src); return len; #undef BUFLEN }
// @pymethod |win32lz|Init|Allocates memory for the internal data structures required to decompress files, and then creates and initializes them. static PyObject * PyLZInit(PyObject *self, PyObject *args) { int h; if (!PyArg_ParseTuple(args, "i:Init", &h )) // @pyparm int|handle||handle of source file return NULL; // @pyseeapi LZInit INT ret = LZInit(h); if (ret<0) return ReturnLZError("LZInit",ret); return PyInt_FromLong(ret); }
/*********************************************************************** * LZOpenFileA (KERNEL32.@) * * Opens a file. If not compressed, open it as a normal file. */ HFILE WINAPI LZOpenFileA( LPSTR fn, LPOFSTRUCT ofs, WORD mode ) { HFILE fd,cfd; DPRINT("(%s,%p,%d)\n",fn,ofs,mode); /* 0x70 represents all OF_SHARE_* flags, ignore them for the check */ fd=OpenFile(fn,ofs,mode); if (fd==HFILE_ERROR) { LPSTR mfn = LZEXPAND_MangleName(fn); fd = OpenFile(mfn,ofs,mode); RtlFreeHeap( GetProcessHeap(), 0, mfn ); } if ((mode&~0x70)!=OF_READ) return fd; if (fd==HFILE_ERROR) return HFILE_ERROR; cfd=LZInit(fd); if ((INT)cfd <= 0) return fd; return cfd; }