static DWORD decompress_file_lz( LPCWSTR source, LPCWSTR target ) { DWORD ret; LONG error; INT src, dst; OFSTRUCT sof, dof; if ((src = LZOpenFileW( (LPWSTR)source, &sof, OF_READ )) < 0) { ERR("cannot open source file for reading\n"); return ERROR_FILE_NOT_FOUND; } if ((dst = LZOpenFileW( (LPWSTR)target, &dof, OF_CREATE )) < 0) { ERR("cannot open target file for writing\n"); LZClose( src ); return ERROR_FILE_NOT_FOUND; } if ((error = LZCopy( src, dst )) >= 0) ret = ERROR_SUCCESS; else { WARN("failed to decompress file %d\n", error); ret = ERROR_INVALID_DATA; } LZClose( src ); LZClose( dst ); return ret; }
static BOOL get_file_sizes_lz( LPCWSTR source, DWORD *source_size, DWORD *target_size ) { DWORD size; BOOL ret = TRUE; if (source_size) { if (!get_file_size( source, &size )) ret = FALSE; else *source_size = size; } if (target_size) { INT file; OFSTRUCT of; if ((file = LZOpenFileW( (LPWSTR)source, &of, OF_READ )) < 0) { ERR("cannot open source file for reading\n"); return FALSE; } *target_size = LZSeek( file, 0, 2 ); LZClose( file ); } return ret; }
BOOL My_LZOpenFileW() { LPWSTR lpFileName=NULL; LPOFSTRUCT lpReOpenBuf=NULL; WORD wStyle=NULL; INT returnVal_Real = NULL; INT returnVal_Intercepted = NULL; DWORD error_Real = 0; DWORD error_Intercepted = 0; disableInterception(); returnVal_Real = LZOpenFileW (lpFileName,lpReOpenBuf,wStyle); error_Real = GetLastError(); enableInterception(); returnVal_Intercepted = LZOpenFileW (lpFileName,lpReOpenBuf,wStyle); error_Intercepted = GetLastError(); return ((returnVal_Real == returnVal_Intercepted) && (error_Real == error_Intercepted)); }