/*********************************************************************** * LZOpenFile (LZEXPAND.2) */ HFILE16 WINAPI LZOpenFile16( LPSTR fn, LPOFSTRUCT ofs, UINT16 mode ) { HFILE hfret = LZOpenFileA( fn, ofs, mode ); /* return errors and LZ handles unmodified */ if ((INT)hfret <= 0) return hfret; if (IS_LZ_HANDLE(hfret)) return hfret; /* but allocate a dos handle for 'normal' files */ return Win32HandleToDosFileHandle((HANDLE)hfret); }
BOOL My_LZOpenFileA() { LPSTR 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 = LZOpenFileA (lpFileName,lpReOpenBuf,wStyle); error_Real = GetLastError(); enableInterception(); returnVal_Intercepted = LZOpenFileA (lpFileName,lpReOpenBuf,wStyle); error_Intercepted = GetLastError(); return ((returnVal_Real == returnVal_Intercepted) && (error_Real == error_Intercepted)); }
/*********************************************************************** * LZOpenFileW (KERNEL32.@) */ HFILE WINAPI LZOpenFileW( LPWSTR fn, LPOFSTRUCT ofs, WORD mode ) { HFILE ret; DWORD len = WideCharToMultiByte( CP_ACP, 0, fn, -1, NULL, 0, NULL, NULL ); LPSTR xfn = RtlAllocateHeap( GetProcessHeap(), 0, len ); WideCharToMultiByte( CP_ACP, 0, fn, -1, xfn, len, NULL, NULL ); ret = LZOpenFileA(xfn,ofs,mode); RtlFreeHeap( GetProcessHeap(), 0, xfn ); return ret; }
int main(int argc, char *argv[]) { int ret = 0; char infile[MAX_PATH], outfile[MAX_PATH], actual_name[MAX_PATH]; char outfile_basename[MAX_PATH], *basename_index; UINT comp; if (argc < 3) { myprintf( "Usage:\n" ); myprintf( "\t%s infile outfile\n", argv[0] ); myprintf( "\t%s /r infile\n", argv[0] ); return 1; } if (argc == 3 && (option_equal(argv[1], "R") || option_equal(argv[1], "r"))) GetFullPathNameA( argv[2], sizeof(infile), infile, NULL ); else GetFullPathNameA( argv[1], sizeof(infile), infile, NULL ); if (!SetupGetFileCompressionInfoExA( infile, actual_name, sizeof(actual_name), NULL, NULL, NULL, &comp )) { myprintf( "%s: can't open input file %s\n", argv[0], infile ); return 1; } if (argc == 3 && (option_equal(argv[1], "R") || option_equal(argv[1], "r"))) { switch (comp) { case FILE_COMPRESSION_MSZIP: outfile_basename[0] = 0; if (!SetupIterateCabinetA( infile, 0, set_outfile, outfile_basename )) { myprintf( "%s: can't determine original name\n", argv[0] ); return 1; } GetFullPathNameA( infile, sizeof(outfile), outfile, &basename_index ); *basename_index = 0; strcat( outfile, outfile_basename ); break; case FILE_COMPRESSION_WINLZA: GetExpandedNameA( infile, outfile_basename ); break; default: myprintf( "%s: can't determine original\n", argv[0] ); return 1; } } else GetFullPathNameA( argv[2], sizeof(outfile), outfile, NULL ); if (!lstrcmpiA( infile, outfile )) { myprintf( "%s: can't expand file to itself\n", argv[0] ); return 1; } switch (comp) { case FILE_COMPRESSION_MSZIP: if (!SetupIterateCabinetA( infile, 0, extract_callback, outfile )) { myprintf( "%s: cabinet extraction failed\n", argv[0] ); return 1; } break; case FILE_COMPRESSION_WINLZA: { INT hin, hout; OFSTRUCT ofin, ofout; LONG error; if ((hin = LZOpenFileA( infile, &ofin, OF_READ )) < 0) { myprintf( "%s: can't open input file %s\n", argv[0], infile ); return 1; } if ((hout = LZOpenFileA( outfile, &ofout, OF_CREATE | OF_WRITE )) < 0) { LZClose( hin ); myprintf( "%s: can't open output file %s\n", argv[0], outfile ); return 1; } error = LZCopy( hin, hout ); LZClose( hin ); LZClose( hout ); if (error < 0) { myprintf( "%s: LZCopy failed, error is %d\n", argv[0], error ); return 1; } break; } default: if (!CopyFileA( infile, outfile, FALSE )) { myprintf( "%s: CopyFileA failed\n", argv[0] ); return 1; } break; } return ret; }