void FolderOutStream_Init(CFolderOutStream *p, const CSzArEx* ar, UInt32 folderIndex, const UInt16* outputDir) { p->s.Write = FolderOutStream_Write; p->ar = ar; p->startIndex = ar->FolderStartFileIndex[folderIndex]; p->currentIndex = 0; p->folderSize = SzFolder_GetUnpackSize(ar->db.Folders + folderIndex); p->fileSize = 0; p->crc = CRC_INIT_VAL; p->checkCrc = False; p->outputDir = outputDir; p->bufPos = 0; File_Construct(&p->file); }
int main2(int numArgs, const char *args[], char *rs) { CFileSeqInStream inStream; CFileOutStream outStream; int res; int encodeMode = 0; Bool modeWasSet = False; const char *inputFile = NULL; const char *outputFile = "file.tmp"; int param; UInt64 fileSize; FileSeqInStream_CreateVTable(&inStream); File_Construct(&inStream.file); FileOutStream_CreateVTable(&outStream); File_Construct(&outStream.file); if (numArgs == 1) { PrintHelp(rs); return 0; } for (param = 1; param < numArgs; param++) { if (strcmp(args[param], "-e") == 0 || strcmp(args[param], "-d") == 0) { encodeMode = (args[param][1] == 'e'); modeWasSet = True; } else if (strcmp(args[param], "--f86") == 0) { mConType = X86Converter; } else if (strcmp(args[param], "-o") == 0 || strcmp(args[param], "--output") == 0) { if (numArgs < (param + 2)) { return PrintUserError(rs); } outputFile = args[++param]; } else if (strcmp(args[param], "--debug") == 0) { if (numArgs < (param + 2)) { return PrintUserError(rs); } // // For now we silently ignore this parameter to achieve command line // parameter compatibility with other build tools. // param++; } else if ( strcmp(args[param], "-h") == 0 || strcmp(args[param], "--help") == 0 ) { PrintHelp(rs); return 0; } else if ( strcmp(args[param], "-v") == 0 || strcmp(args[param], "--verbose") == 0 ) { // // For now we silently ignore this parameter to achieve command line // parameter compatibility with other build tools. // } else if ( strcmp(args[param], "-q") == 0 || strcmp(args[param], "--quiet") == 0 ) { mQuietMode = True; } else if (strcmp(args[param], "--version") == 0) { PrintVersion(rs); return 0; } else if (inputFile == NULL) { inputFile = args[param]; } else { return PrintUserError(rs); } } if ((inputFile == NULL) || !modeWasSet) { return PrintUserError(rs); } { size_t t4 = sizeof(UInt32); size_t t8 = sizeof(UInt64); if (t4 != 4 || t8 != 8) return PrintError(rs, "Incorrect UInt32 or UInt64"); } if (InFile_Open(&inStream.file, inputFile) != 0) return PrintError(rs, "Can not open input file"); if (OutFile_Open(&outStream.file, outputFile) != 0) return PrintError(rs, "Can not open output file"); File_GetLength(&inStream.file, &fileSize); if (encodeMode) { if (!mQuietMode) { printf("Encoding\n"); } res = Encode(&outStream.s, &inStream.s, fileSize); } else { if (!mQuietMode) { printf("Decoding\n"); } res = Decode(&outStream.s, &inStream.s, fileSize); } File_Close(&outStream.file); File_Close(&inStream.file); if (res != SZ_OK) { if (res == SZ_ERROR_MEM) return PrintError(rs, kCantAllocateMessage); else if (res == SZ_ERROR_DATA) return PrintError(rs, kDataErrorMessage); else if (res == SZ_ERROR_WRITE) return PrintError(rs, kCantWriteMessage); else if (res == SZ_ERROR_READ) return PrintError(rs, kCantReadMessage); return PrintErrorNumber(rs, res); } return 0; }